fix my error:
PS C:\Users\Abbas\Downloads\Programs\Planner> & C:/Users/Abbas/AppData/Local/Programs/Python/Python311/python.exe c:/Users/Abbas/Downloads/Programs/Planner/palnner.py
Traceback (most recent call last):
File "c:\Users\Abbas\Downloads\Programs\Planner\palnner.py", line 2, in
from PyQt6.QtWidgets import (
ImportError: cannot import name 'QAction' from 'PyQt6.QtWidgets' (C:\Users\Abbas\AppData\Local\Programs\Python\Python311\Lib\site-packages\PyQt6\QtWidgets.pyd)
PS C:\Users\Abbas\Downloads\Programs\Planner> & C:/Users/Abbas/AppData/Local/Programs/Python/Python311/python.exe c:/Users/Abbas/Downloads/Programs/Planner/palnner.py
Traceback (most recent call last):
File "c:\Users\Abbas\Downloads\Programs\Planner\palnner.py", line 2, in
from PyQt6.QtWidgets import (
ImportError: cannot import name 'QAction' from 'PyQt6.QtWidgets' (C:\Users\Abbas\AppData\Local\Programs\Python\Python311\Lib\site-packages\PyQt6\QtWidgets.pyd)

My code:

import sys
from PyQt6.QtWidgets import (
QApplication,
QMainWindow,
QWidget,
QLabel,
QTextEdit,
QPushButton,
QVBoxLayout,
QHBoxLayout,
QScrollArea,
QMenuBar,
QMenu,
QAction,
QMessageBox,
)
from PyQt6.QtCore import Qt, QPropertyAnimation, QRect
from PyQt6.QtGui import QFont, QPalette, QColor

class BooklandApp(QMainWindow):
def init(self):
super().init()
self.setWindowTitle("بوک لند")
self.setFixedSize(800, 600)
self.is_dark_mode = False
self.init_ui()


def init_ui(self):
    # تنظیم رنگ‌ها
    self.light_colors = {
        "background": "#FFFFFF",
        "color1": "#96CEB4",  # سبز روشن
        "color2": "#FFAD60",  # نارنجی
        "color3": "#A02334",  # قرمز تیره
        "color4": "#FFEEAD",  # زرد روشن
        "text": "#000000",
    }
    self.dark_colors = {
        "background": "#333333",
        "color1": "#5A9A81",
        "color2": "#CC8533",
        "color3": "#70121A",
        "color4": "#5A5A4D",
        "text": "#FFFFFF",
    }
    self.colors = self.light_colors

    # تنظیم ویجت و لایه اصلی
    main_widget = QWidget()
    self.setCentralWidget(main_widget)
    self.main_layout = QVBoxLayout()
    main_widget.setLayout(self.main_layout)

    # تنظیم منوی همبرگری
    menu_bar = QMenuBar(self)
    menu = menu_bar.addMenu("≡")
    self.setMenuBar(menu_bar)
    
    # افزودن اقدامات به منو
    settings_action = QAction("تنظیمات", self)
    about_action = QAction("درباره", self)
    menu.addAction(settings_action)
    menu.addAction(about_action)

    # افزودن گزینه حالت تاریک
    dark_mode_action = QAction("حالت تاریک", self)
    dark_mode_action.setCheckable(True)
    dark_mode_action.triggered.connect(self.toggle_dark_mode)
    menu.addAction(dark_mode_action)

    # ایجاد منطقه اسکرول برای محتوای اصلی
    scroll_area = QScrollArea()
    scroll_area.setWidgetResizable(True)
    scroll_content = QWidget()
    scroll_area.setWidget(scroll_content)
    self.scroll_layout = QVBoxLayout()
    self.scroll_layout.setAlignment(Qt.AlignmentFlag.AlignRight)
    scroll_content.setLayout(self.scroll_layout)

    # بخش‌های مورد نیاز (به فارسی)
    sections = [
        ("کارهای روزانه", "daily_tasks"),
        ("شکرگزاری", "thanksgiving"),
        ("ساعت‌های مطالعه", "study_hours"),
        ("آهنگ امروز", "todays_song"),
        ("زمان بیدار شدن", "when_i_woke_up"),
        ("انگیزه امروز", "todays_motivation"),
    ]

    # ایجاد فیلدهای ورودی برای هر بخش
    self.inputs = {}
    for title, name in sections:
        label = QLabel(title)
        label.setFont(QFont("B Nazanin", 14))
        label.setAlignment(Qt.AlignmentFlag.AlignRight)
        label.setStyleSheet(f"color: {self.colors['color3']};")

        text_edit = QTextEdit()
        text_edit.setFixedHeight(80)
        text_edit.setStyleSheet(f"background-color: {self.colors['color4']}; border-radius: 5px;")
        text_edit.setAlignment(Qt.AlignmentFlag.AlignRight)
        text_edit.setFont(QFont("B Nazanin", 12))

        self.inputs[name] = text_edit

        self.scroll_layout.addWidget(label)
        self.scroll_layout.addWidget(text_edit)

    # افزودن منطقه اسکرول به لایه اصلی
    self.main_layout.addWidget(scroll_area)

    # ایجاد دکمه‌های ذخیره و لغو
    button_layout = QHBoxLayout()
    button_layout.setAlignment(Qt.AlignmentFlag.AlignCenter)

    save_button = QPushButton("ذخیره")
    save_button.setFixedHeight(40)
    save_button.setFixedWidth(120)
    save_button.setStyleSheet(self.button_style(self.colors['color1']))
    save_button.pressed.connect(lambda: save_button.setStyleSheet(self.button_pressed_style()))
    save_button.released.connect(lambda: save_button.setStyleSheet(self.button_style(self.colors['color1'])))
    save_button.clicked.connect(self.save_data)
    self.add_button_animation(save_button)

    cancel_button = QPushButton("لغو")
    cancel_button.setFixedHeight(40)
    cancel_button.setFixedWidth(120)
    cancel_button.setStyleSheet(self.button_style(self.colors['color2']))
    cancel_button.pressed.connect(lambda: cancel_button.setStyleSheet(self.button_pressed_style()))
    cancel_button.released.connect(lambda: cancel_button.setStyleSheet(self.button_style(self.colors['color2'])))
    cancel_button.clicked.connect(self.cancel_data)
    self.add_button_animation(cancel_button)

    button_layout.addWidget(cancel_button)
    button_layout.addWidget(save_button)

    self.main_layout.addLayout(button_layout)
    self.update_style()

def button_style(self, color):
    return f"""
    QPushButton {{
        background-color: {color};
        color: #000000;
        border: none;
        border-radius: 20px;
        font-size: 16px;
    }}
    """

def button_pressed_style(self):
    return f"""
    QPushButton {{
        background-color: #CCCCCC;
        color: #000000;
        border: none;
        border-radius: 20px;
        font-size: 16px;
    }}
    """

def add_button_animation(self, button):
    # افزودن افکت هنگام هاور
    button.setStyleSheet(button.styleSheet() + """
    QPushButton:hover {
        background-color: #D3D3D3;
    }
    """)
    # افزودن انیمیشن کلیک با استفاده از QPropertyAnimation
    animation = QPropertyAnimation(button, b"geometry")
    animation.setDuration(100)
    animation.setLoopCount(1)
    # The animation is created but not used, usually you might want to start it or set its start/end values.

def toggle_dark_mode(self, checked):
    self.is_dark_mode = checked
    self.colors = self.dark_colors if self.is_dark_mode else self.light_colors
    self.update_style()

def update_style(self):
    # به‌روزرسانی استایل‌شیت‌های ویجت‌ها
    palette = self.palette()
    palette.setColor(QPalette.ColorRole.Window, QColor(self.colors['background']))
    palette.setColor(QPalette.ColorRole.WindowText, QColor(self.colors['text']))
    self.setPalette(palette)

    self.setStyleSheet(f"background-color: {self.colors['background']}; color: {self.colors['text']};")

    for name, text_edit in self.inputs.items():
        text_edit.setStyleSheet(f"""
        QTextEdit {{
            background-color: {self.colors['color4']};
            color: {self.colors['text']};
            border-radius: 5px;
        }}
        """)
        text_edit.setFont(QFont("B Nazanin", 12))
        text_edit.setAlignment(Qt.AlignmentFlag.AlignRight)

    # به‌روزرسانی لیبل‌ها
    labels = self.findChildren(QLabel)
    for label in labels:
        label.setStyleSheet(f"color: {self.colors['color3']};")
        label.setFont(QFont("B Nazanin", 14))
        label.setAlignment(Qt.AlignmentFlag.AlignRight)

    # به‌روزرسانی دکمه‌ها
    buttons = self.findChildren(QPushButton)
    for button in buttons:
        if button.text() == "ذخیره":
            color = self.colors['color1']
        elif button.text() == "لغو":
            color = self.colors['color2']
        else:
            color = self.colors['color1']
        button.setStyleSheet(self.button_style(color))
        button.setFont(QFont("B Nazanin", 14))
        self.add_button_animation(button)

def save_data(self):
    # ذخیره داده‌ها (پیاده‌سازی اولیه)
    data = {name: field.toPlainText() for name, field in self.inputs.items()}
    print("اطلاعات ذخیره شد:", data)
    msg = QMessageBox()
    msg.setWindowTitle("ذخیره شد")
    msg.setText("اطلاعات با موفقیت ذخیره شد.")
    msg.exec()

def cancel_data(self):
    # پاک کردن تمام فیلدهای ورودی
    for field in self.inputs.values():
        field.clear()
    msg = QMessageBox()
    msg.setWindowTitle("لغو شد")
    msg.setText("اطلاعات پاک شدند.")
    msg.exec()
def main():
app = QApplication(sys.argv)
app.setStyle("Fusion")


window = BooklandApp()
window.show()
sys.exit(app.exec())
if name == "main":
main()