import os import sys import time from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt, pyqtSignal from utils.BasicUtils import load_myday_important, remove_todo_list, change_value, get_todo, get_myday_important_conf, \ change_myday_important_conf from utils.CreateToDo import CreateToDo from view.AddToDoLabel import AddToDoAction from view.ToDoItem import ToDoItem class Important(QWidget): # 更新信号,在删除时触发 update_signal = pyqtSignal() signal = pyqtSignal() def __init__(self): super(Important, self).__init__() self.setObjectName('important') self.setAttribute(Qt.WA_StyledBackground) background = get_myday_important_conf('Important', 'Theme') self.setStyleSheet('#important{background-image:url("../images/' + background + '.jpg");border-radius: 10px;}') # 布局样式:最外面一个大的垂直布局,里面的最上面标题是一个水平布局,水平布局显示的是一个垂直布局和一个右边的选项,用来更换背景 # 布局样式:继承QWidget,里面一个垂直布局,最上面一个QWidget用来设置头部布局 # 头部QWidget里面一个水平布局,水平布局里面一个QWidget(方便设置整体位置),然后是一个 layout = QVBoxLayout() head_layout = QHBoxLayout() head_widget = QWidget(self) self.todo_list = QListWidget() # 关闭滚动条 self.todo_list.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) 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) head_widget.setAttribute(Qt.WA_StyledBackground) head_widget.setLayout(head_layout) head_layout.setAlignment(Qt.AlignCenter) layout.addWidget(head_widget, 2, Qt.AlignTop) layout.addWidget(self.todo_list, 6, Qt.AlignCenter | Qt.AlignTop) head_label = QLabel("重要") head_label.setObjectName('head_label') font = QFont() font.setPointSize(32) head_label.setFont(font) layout.addStretch(1) head_layout.addWidget(head_label, 8) layout.addStretch(1) 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) refresh_label = QAction(self) refresh_label.setText('刷新') refresh_label.setIcon(QIcon('../images/refresh.svg')) # refresh_label.setDisabled(True) self.button_menu.addAction(refresh_label) self.button_menu.addSeparator() refresh_label.triggered.connect(self.refresh_action) theme_label = QAction(self) theme_label.setText('主题') theme_label.setDisabled(True) self.button_menu.addAction(theme_label) self.button_menu.addSeparator() 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) # 右键菜单 self.todo_list.setContextMenuPolicy(Qt.CustomContextMenu) self.todo_list.customContextMenuRequested.connect(self.todo_list_context) # todolist = ToDoList() self.refresh_action() def refresh_action(self): # self.my_day_list[] self.todo_list.clear() # print(self.my_day_list) my_day_list = load_myday_important('Important') if my_day_list: for my_day in my_day_list: self.load_important(my_day[0], my_day[1]) def load_important(self, name, uid): todo_item = ToDoItem(name, uid) todo_item.mark_icon.clicked.connect(lambda: self.mark_done(uid)) todo_item.important_button.clicked.connect(lambda: self.mark_important(uid)) self.todo_list.addItem(todo_item) self.todo_list.setItemWidget(todo_item, todo_item.widget) def menu_action(self, count): # 点击按钮 count = str(count) change_myday_important_conf('Important', 'theme', count) # self.menu_label = ChangeTheme() self.setStyleSheet('#important{background-image:url("../images/' + count + '.jpg");' 'background-position: center; border-radius: 10px;' '}') # print('选中:' + count) def line_edit_add(self, name): if name: self.add_todo.todo_name.emit(name) # print('添加的新ToDo:' + name) create_todo = CreateToDo('Todo', name) change_value(create_todo, 'isImportant', True) 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() def todo_list_context(self, position): # 设置右键菜单 pop_menu = QMenu(self) pop_menu.setObjectName('lift_menu') pop_menu.setAttribute(Qt.WA_TranslucentBackground) # 无边框、去掉自带阴影 pop_menu.setWindowFlags( pop_menu.windowFlags() | Qt.FramelessWindowHint | Qt.NoDropShadowWindowHint) rename_action = QAction(u'重命名', self) mark_myday = QAction(QIcon(QPixmap(os.getcwd() + '/../images/make_sun.svg')), u"设置为我的一天", self) mark_important = QAction(QIcon(QPixmap(os.getcwd() + '/../images/star.svg')), u"取消设置为重要", self) del_action = QAction("删除", self) # 查看右键时是否在item上面,如果不在.就不显示删除和修改. if self.todo_list.itemAt(position): pop_menu.addAction(mark_myday) pop_menu.addAction(mark_important) pop_menu.addAction(del_action) pop_menu.addAction(rename_action) mark_myday.triggered.connect(lambda: self.make_action('MyDay')) rename_action.triggered.connect(self.rename_item) # copy_action.triggered.connect(self.create_item) del_action.triggered.connect(self.delete_item) mark_important.triggered.connect(lambda: self.make_action('Important')) pop_menu.exec_(self.todo_list.mapToGlobal(position)) def make_action(self, make_type): # print(self.todo_list.currentRow()) load_todo = load_myday_important('Important') print(load_todo) uid = load_todo[self.todo_list.currentRow()][1] if make_type == 'MyDay': change_value(uid, 'isMyDay', True) elif make_type == 'Important': change_value(uid, 'isImportant', False) self.todo_list.takeItem(self.todo_list.currentRow()) self.refresh_action() self.update_signal.emit() # 删除分组 def delete_item(self): # print(self.load_list[self.system_listWidget.currentRow() - 2][1]) my_day_list = load_myday_important('Important') # load_todo = get_todo(my_day_list[self.todo_list.currentRow()][1]) uid = my_day_list[self.todo_list.currentRow()][1] remove_todo_list(uid) # change_value(uid,'isImportant',False) self.todo_list.takeItem(self.todo_list.currentRow()) self.update_signal.emit() # 重命名分组 def rename_item(self): # curRow = self.todo_list.currentRow() # item = self.todo_list.item(curRow) self.dialog = QDialog() self.dialog.setWindowTitle('重命名') self.dialog_layout = QVBoxLayout() self.dialog.resize(300, 200) self.dialog.setLayout(self.dialog_layout) line_edit = QLineEdit() # line_edit.setObjectName('rename_line') line_edit.setStyleSheet('border: 1px solid;background:transparent;min-width:400px;') line_edit.setPlaceholderText('请输入新的名字') self.dialog_layout.addWidget(line_edit) confirm_button = QPushButton('确认修改') self.dialog_layout.addWidget(confirm_button) confirm_button.setStyleSheet('background-color:#bcbcbc;border-radius:5px;') confirm_button.clicked.connect(lambda: self.change_name(line_edit.text())) self.dialog.exec_() def change_name(self, item_name): print(item_name) my_day_list = load_myday_important('Important') change_value(my_day_list[self.todo_list.currentRow()][1], 'title', item_name) # 重命名发送信号 self.refresh_action() self.update_signal.emit() self.dialog.close() def mark_done(self, uid): # print('mark done:', uid) change_value(uid, 'done', True) time.sleep(0.5) self.refresh_action() self.update_signal.emit() def mark_important(self, uid): change_value(uid, 'isImportant', True) # print('mark important:', uid) self.refresh_action() self.update_signal.emit()