import os from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt, pyqtSignal from utils.BasicUtils import load_myday_important from utils.CreateToDo import CreateToDo from view.AddToDoLabel import AddToDoAction from view.MyDayHeadLabel import HeadLabel from view.ToDoItem import ToDoItem class Menu(QMenu): def __init__(self, *__args): super(Menu, self).__init__() self.index = None def set_index(self, index): self.index = index class MyDay(QWidget): transaction = pyqtSignal() def __init__(self, parent=None): super(MyDay, self).__init__() self.setObjectName('my_day') self.setStyleSheet('#my_day{background-image:url("../images/0.jpg");border-radius: 10px;}') self.setAttribute(Qt.WA_StyledBackground) # 下面这一句有问题,需要修复修改主题的实现方法 # self.setStyleSheet('#my_day{background-image:url("../images/2.jpg");') # 无效 # palette = QPalette() # palette.setBrush(QPalette.Background, # QBrush(QPixmap(os.getcwd() + "/../images/0.jpg").scaled(self.width(), self.height()))) # self.setPalette(palette) # 布局样式:最外面一个大的垂直布局,里面的最上面标题是一个水平布局,水平布局显示的是一个垂直布局和一个右边的选项,用来更换背景 # 布局样式:继承QWidget,里面一个垂直布局,最上面一个QWidget用来设置头部布局 # 头部QWidget里面一个水平布局,水平布局里面一个QWidget(方便设置整体位置),然后是一个 layout = QVBoxLayout() # 总布局 head_layout = QHBoxLayout() # 头部总布局 head_widget = QWidget(self) # head_widget.setStyleSheet('background-color:gray') # head_widget.setMinimumHeight(175) # head_widget.setMaximumHeight(180) head_widget.setAttribute(Qt.WA_StyledBackground) self.todo_list = QListWidget() self.todo_list.setFrameShape(QListWidget.NoFrame) self.todo_list.setObjectName('todo_list') # 最下面的添加ToDo标签 self.add_todo = AddToDoAction() self.add_todo.line_edit.returnPressed.connect(lambda: self.line_edit_add(self.add_todo.line_edit.text())) self.add_todo.setAlignment(Qt.AlignCenter) # self.add_todo.todo_name.connect(self.add_todo_action) # head_widget.setPalette(palette) head_widget.setLayout(head_layout) head_layout.setAlignment(Qt.AlignCenter) # head_left_layout = QVBoxLayout() layout.addWidget(head_widget, 2, Qt.AlignTop) # layout.addStretch(1) # layout.addSpacing(1) self.head_label = HeadLabel() layout.addWidget(self.todo_list, 6, Qt.AlignCenter | Qt.AlignTop) head_layout.addWidget(self.head_label, 8) # todo : 修改布局 layout.addWidget(self.add_todo, 2, Qt.AlignHCenter) self.menu_image = QPushButton() self.menu_image.setObjectName('menu_image') self.menu_image.setFixedSize(30, 30) # self.menu_image.setScaledContents(True) pic_btn = QPixmap(os.getcwd() + "/../images/menu.png") self.menu_image.setIcon(QIcon(pic_btn)) head_layout.addWidget(self.menu_image, 2) head_layout.addStretch(1) self.setLayout(layout) # self.menu_image.clicked.connect(self.menu_action) self.button_menu = QMenu(self) # 背景透明 self.button_menu.setAttribute(Qt.WA_TranslucentBackground) # 无边框、去掉自带阴影 self.button_menu.setWindowFlags( self.button_menu.windowFlags() | Qt.FramelessWindowHint | Qt.NoDropShadowWindowHint) self.menu_image.setMenu(self.button_menu) theme_label = QAction(self) theme_label.setText('主题') theme_label.setDisabled(True) self.button_menu.addAction(theme_label) self.button_menu.addSeparator() # # for i in range(11): # label_action = QAction(self) # label_action.setIcon(QIcon('../images/' + str(i) + '.jpg')) # label_action.setText(str(i)) # label_action.triggered.connect(lambda: self.menu_action(str(i))) # self.button_menu.addAction(label_action) # for i in range(11): label_action1 = QAction(self) label_action1.setIcon(QIcon('../images/1.jpg')) label_action1.setText('背景1') label_action1.triggered.connect(lambda: self.menu_action(1)) self.button_menu.addAction(label_action1) label_action2 = QAction(self) label_action2.setIcon(QIcon('../images/2.jpg')) label_action2.setText('背景2') label_action2.triggered.connect(lambda: self.menu_action(2)) self.button_menu.addAction(label_action2) label_action3 = QAction(self) label_action3.setIcon(QIcon('../images/3.jpg')) label_action3.setText('背景3') label_action3.triggered.connect(lambda: self.menu_action(3)) self.button_menu.addAction(label_action3) label_action4 = QAction(self) label_action4.setIcon(QIcon('../images/4.jpg')) label_action4.setText('背景4') label_action4.triggered.connect(lambda: self.menu_action(4)) self.button_menu.addAction(label_action4) label_action5 = QAction(self) label_action5.setIcon(QIcon('../images/5.jpg')) label_action5.setText('背景5') label_action5.triggered.connect(lambda: self.menu_action(5)) self.button_menu.addAction(label_action5) my_day_list = load_myday_important('MyDay') if my_day_list: for my_day in my_day_list: self.load_myday(my_day[0], my_day[1]) def load_myday(self, name, uid): todo_item = ToDoItem(name, uid) self.todo_list.addItem(todo_item) self.todo_list.setItemWidget(todo_item, todo_item.widget) pass # todo : 下面的方法实现点击更换主题的功能 def menu_action(self, count): count = str(count) # 点击按钮 self.setStyleSheet('#my_day{background-image:url("../images/' + count + '.jpg");' 'background-position: center; border-radius: 10px;' '}') self.head_label.show() print(' 选中:' + count) # # def add_todo_action(self, name): # print(name) # todo : 回车添加事件 def line_edit_add(self, name): if name: self.add_todo.todo_name.emit(name) # print('添加的新ToDo:' + name) create_todo = CreateToDo('Todo', name, self.uid) todo_item = ToDoItem(name, create_todo) self.todo_list.addItem(todo_item) self.todo_list.setItemWidget(todo_item, todo_item.widget) self.add_todo.line_edit.clear()