From e9f3d2fc50814039ac8648a6d0daea81c1b692dc Mon Sep 17 00:00:00 2001 From: liyp Date: Mon, 25 Apr 2022 22:32:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD=E9=83=BD?= =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E5=AE=9E=E7=8E=B0=EF=BC=8C=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=9C=80=E5=90=8E=E4=B8=80=E4=B8=AA=E8=AE=BE=E7=BD=AE=E5=92=8C?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=8C=E4=BD=BF=E7=94=A8=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA=E7=AC=94=E8=AE=B0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=92=8C=E6=9C=80=E5=B0=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/icon/学习.svg | 1 + images/icon/工作.svg | 1 + images/icon/{冲浪.svg => 度假.svg} | 0 images/icon/沙滩.svg | 1 - images/icon/行李箱.svg | 1 - images/icon/购物.svg | 2 +- main/main.py | 160 +++++++++++++++++------------ test/QListWidgetTest.py | 54 ---------- utils/BasicUtils.py | 6 +- utils/CreateToDo.py | 34 +++++- view/AddToDoLabel.py | 8 -- view/ImportantView.py | 50 ++++----- view/MyDayView.py | 115 +++++++++++---------- view/SelfListWidgetItem.py | 2 - view/ToDoItem.py | 11 +- view/ToDoListView.py | 94 +++++++++-------- 16 files changed, 270 insertions(+), 270 deletions(-) create mode 100644 images/icon/学习.svg create mode 100644 images/icon/工作.svg rename images/icon/{冲浪.svg => 度假.svg} (100%) delete mode 100644 images/icon/沙滩.svg delete mode 100644 images/icon/行李箱.svg delete mode 100644 test/QListWidgetTest.py diff --git a/images/icon/学习.svg b/images/icon/学习.svg new file mode 100644 index 0000000..3c777f7 --- /dev/null +++ b/images/icon/学习.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icon/工作.svg b/images/icon/工作.svg new file mode 100644 index 0000000..9ae4891 --- /dev/null +++ b/images/icon/工作.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icon/冲浪.svg b/images/icon/度假.svg similarity index 100% rename from images/icon/冲浪.svg rename to images/icon/度假.svg diff --git a/images/icon/沙滩.svg b/images/icon/沙滩.svg deleted file mode 100644 index 5418fbe..0000000 --- a/images/icon/沙滩.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/icon/行李箱.svg b/images/icon/行李箱.svg deleted file mode 100644 index aaa048e..0000000 --- a/images/icon/行李箱.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/icon/购物.svg b/images/icon/购物.svg index cbcbb66..9436b03 100644 --- a/images/icon/购物.svg +++ b/images/icon/购物.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/main/main.py b/main/main.py index abe6b88..7ec9499 100644 --- a/main/main.py +++ b/main/main.py @@ -2,7 +2,7 @@ import os import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, pyqtSignal import configparser from utils.BasicUtils import get_todo_list, remove_todo_list, change_value @@ -18,6 +18,8 @@ from view.MyDayView import MyDay class MainWidget(QWidget): + update_signal = pyqtSignal() + def __init__(self): super(MainWidget, self).__init__() self.user_label = User() @@ -57,11 +59,6 @@ class MainWidget(QWidget): layout.addWidget(self.stackedWidget, 6) - self.one_day = SelfListWidgetItem('我的一天', 0, None, os.getcwd() + '/../images/sun.svg') - self.system_listWidget.setCurrentRow(1) - # self.one_day.setSelected(True) - self.important_item = SelfListWidgetItem('重要', 0, None, os.getcwd() + '/../images/star.svg') - self.system_listWidget.currentRowChanged.connect(self.stackedWidget.setCurrentIndex) self.setLayout(layout) @@ -71,25 +68,26 @@ class MainWidget(QWidget): # 先清除列表,方便后面调用 self.system_listWidget.clear() # 系统默认的两个 item + self.one_day = SelfListWidgetItem('我的一天', 0, None, os.getcwd() + '/../images/sun.svg') + self.system_listWidget.setCurrentRow(1) + # self.one_day.setSelected(True) + self.important_item = SelfListWidgetItem('重要', 0, None, os.getcwd() + '/../images/star.svg') + self.system_listWidget.addItem(self.one_day) self.system_listWidget.setItemWidget(self.one_day, self.one_day.widget) self.system_listWidget.addItem(self.important_item) self.system_listWidget.setItemWidget(self.important_item, self.important_item.widget) # todo : 通过信号修改显示的标题名字 - self.system_listWidget.change_list_name.connect(self.change_list) + # self.system_listWidget.change_list_name.connect(self.change_list) # 加载列表 - self.load_list = get_todo_list() + load_list = get_todo_list() # print(load_list) - if self.load_list: - for load in self.load_list: - self.load_item(load[0], load[1]) + if load_list: + for load in load_list: + self.load_item(load[0], load[1], load[3]) # self.system_listWidget.addScrollBarWidget(False) - def change_list(self): - print(self.system_listWidget.currentItem().text()) - # print(name) - # todo 仔细研究右键菜单 def myListWidgetContext(self, position): @@ -107,37 +105,83 @@ class MainWidget(QWidget): # copy_action = QAction("复制分组", self) del_action = QAction("删除分组", self) + change_icon = QMenu('修改图标', pop_menu) + # 背景透明 + change_icon.setAttribute(Qt.WA_TranslucentBackground) + # 无边框、去掉自带阴影 + change_icon.setWindowFlags( + change_icon.windowFlags() | Qt.FramelessWindowHint | Qt.NoDropShadowWindowHint) + + # 二级菜单 + action1 = QAction(QIcon(os.getcwd() + '/../images/icon/星宿.svg'), "星宿", self) + action2 = QAction(QIcon(os.getcwd() + '/../images/icon/度假.svg'), "度假", self) + action3 = QAction(QIcon(os.getcwd() + '/../images/icon/冰淇淋.svg'), "冰淇淋", self) + action4 = QAction(QIcon(os.getcwd() + '/../images/icon/学习.svg'), "学习", self) + action5 = QAction(QIcon(os.getcwd() + '/../images/icon/工作.svg'), "工作", self) + action6 = QAction(QIcon(os.getcwd() + '/../images/icon/购物.svg'), "购物", self) + change_icon.addAction(action1) + change_icon.addAction(action2) + change_icon.addAction(action3) + change_icon.addAction(action4) + change_icon.addAction(action5) + change_icon.addAction(action6) + + action1.triggered.connect(lambda: self.change_icon('星宿')) + action2.triggered.connect(lambda: self.change_icon('度假')) + action3.triggered.connect(lambda: self.change_icon('冰淇淋')) + action4.triggered.connect(lambda: self.change_icon('学习')) + action5.triggered.connect(lambda: self.change_icon('工作')) + action6.triggered.connect(lambda: self.change_icon('购物')) # 查看右键时是否在item上面,如果不在.就不显示删除和修改. - pop_menu.addAction(rename_action) + if self.system_listWidget.itemAt(position): pop_menu.addAction(del_action) pop_menu.addAction(rename_action) + # pop_menu.addAction(change_icon) + pop_menu.addMenu(change_icon) rename_action.triggered.connect(self.rename_item) # copy_action.triggered.connect(self.create_item) del_action.triggered.connect(self.delete_item) pop_menu.exec_(self.system_listWidget.mapToGlobal(position)) + def change_icon(self, icon): + # print(icon) + load_list = get_todo_list() + change_value(load_list[self.system_listWidget.currentRow() - 2][1], 'icon', icon) + self.initUI() + # 加载左侧列表 - def load_item(self, list_name, uid): - item = SelfListWidgetItem(list_name, 0, uid) + + def load_item(self, list_name, uid, icon=None): + # print(icon) + # self.stackedWidget.currentChanged.connect(self.change) + item = SelfListWidgetItem(list_name, 0, uid, os.getcwd() + '/../images/icon/' + icon + '.svg') item.setTextAlignment(Qt.AlignCenter) # 使得item是可以编辑的. item.setFlags(item.flags() | Qt.ItemIsEditable) self.system_listWidget.addItem(item) todo_list = ToDoList(list_name, uid) # 信号测试成功!! - # 更新重要内容 + # 更新 重要 内容 todo_list.update_signal.connect(self.important.refresh_action) + todo_list.update_signal.connect(self.my_day.refresh_action) + # 删除分组时可用 self.important.update_signal.connect(todo_list.refresh_action) + self.important.update_signal.connect(self.my_day.refresh_action) + self.my_day.update_signal.connect(todo_list.refresh_action) + self.my_day.update_signal.connect(self.important.refresh_action) + + self.update_signal.connect(todo_list.refresh_action) # 创建后就可以编辑item,用户自己起名字. # self.system_listWidget.editItem(item) self.stackedWidget.addWidget(todo_list) self.system_listWidget.setItemWidget(item, item.widget) - + def change(self): + print(1) # 点击创建新的分组 def create_item(self, new_list='新建列表', uid=None): # 创建一个没有名字的item @@ -152,67 +196,47 @@ class MainWidget(QWidget): todo_list = ToDoList(new_list, create_todo_uid) self.stackedWidget.addWidget(todo_list) - # 创建后就可以编辑item,用户自己起名字. - # self.system_listWidget.editItem(item) self.system_listWidget.setItemWidget(item, item.widget) # 删除分组 def delete_item(self): # print(self.load_list[self.system_listWidget.currentRow() - 2][1]) - remove_todo_list(self.load_list[self.system_listWidget.currentRow() - 2][1]) + load_list = get_todo_list() + remove_todo_list(load_list[self.system_listWidget.currentRow() - 2][1]) self.system_listWidget.takeItem(self.system_listWidget.currentRow()) # 重命名分组 # todo : 重命名还没做好 def rename_item(self): - dialog = QDialog() - dialog.setWindowTitle('重命名') - dialog_layout = QGridLayout() - dialog.resize(300, 200) - dialog.setLayout(dialog_layout) + # 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('请输入新的名字') - dialog_layout.addWidget(line_edit, 0, 1, 1, 2) - self.confirm_button = QPushButton('确认修改') - dialog_layout.addWidget(self.confirm_button, 1, 1) - # self.load_list = get_todo_list() - line_edit.textChanged.connect(self.confirm_action) + 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())) - # if line_edit.text() != '': - # change_value(self.load_list[self.system_listWidget.currentRow() - 2][1], 'title', line_edit.text()) - # self.confirm_button.clicked.connect(self.initUI) - dialog.exec_() - # - # curRow = self.system_listWidget.currentRow() - # item = self.system_listWidget.item(curRow) - # item.setFlags(item.flags() | Qt.ItemIsEditable) - # self.system_listWidget.editItem(item) - # self.system_listWidget.itemChanged.connect(lambda: self.ChangeItem(item)) + self.dialog.exec_() - def ChangeItem(self, item): - print(item) - - print("test") - - def confirm_action(self, text): - # print(text) - self.load_list = get_todo_list() - change_value(self.load_list[self.system_listWidget.currentRow() - 2][1], 'title', text) - self.confirm_button.clicked.connect(self.load_ui) - # self.system_listWidget.itemChanged.connect(lambda: self.ChangeItem(text)) - - pass - - def load_ui(self): - # 先清除列表,方便后面调用 - self.system_listWidget.clear() - # 系统默认的两个 item - self.system_listWidget.addItem(self.one_day) - self.system_listWidget.setItemWidget(self.one_day, self.one_day.widget) - - self.system_listWidget.addItem(self.important_item) - self.system_listWidget.setItemWidget(self.important_item, self.important_item.widget) - self.close() + def change_name(self, item_name): + # print(item_name) + load_list = get_todo_list() + change_value(load_list[self.system_listWidget.currentRow() - 2][1], 'title', item_name) + self.update_signal.emit() + # 重命名发送信号 + self.initUI() + # self.update_signal.emit() + self.dialog.close() class MainWindow(QWidget): @@ -233,7 +257,7 @@ if __name__ == "__main__": main = MainWindow() main.setWindowTitle('PyQtToDoList') # print(os.path.abspath('../')) - style_sheet = QSSLoader.read_qss_file('../resource/current.qss') + style_sheet = QSSLoader.read_qss_file(os.getcwd() + '/../resource/current.qss') main.setStyleSheet(style_sheet) app.setWindowIcon(QIcon(os.path.abspath('../') + '/images/todo.svg')) diff --git a/test/QListWidgetTest.py b/test/QListWidgetTest.py deleted file mode 100644 index 35f138d..0000000 --- a/test/QListWidgetTest.py +++ /dev/null @@ -1,54 +0,0 @@ - - self.leftWidget =QListWidget() - #禁止双击可编辑 - self.leftWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) - #右键菜单 - self.leftWidget.setContextMenuPolicy(Qt.CustomContextMenu) - self.leftWidget.customContextMenuRequested.connect(self.myListWidgetContext) - - def myListWidgetContext(self,position): - #弹出菜单 - popMenu = QMenu() - creAct =QAction("新建分组",self) - delAct =QAction("删除分组",self) - renameAct =QAction(u'重命名', self) - #查看右键时是否在item上面,如果不在.就不显示删除和修改. - popMenu.addAction(creAct) - if self.leftWidget.itemAt(position): - popMenu.addAction(delAct) - popMenu.addAction(renameAct) - - creAct.triggered.connect(self.CreateNewItem) - renameAct.triggered.connect(self.RenameItem) - delAct.triggered.connect(self.DeleteItem) - popMenu.exec_(self.leftWidget.mapToGlobal(position)) - - #创建新的分组 - def CreateNewItem(self): - #创建一个没有名字的item - item =QListWidgetItem("") - item.setTextAlignment(Qt.AlignCenter) - #使得item是可以编辑的. - item.setFlags(item.flags() | Qt.ItemIsEditable) - self.leftWidget.addItem(item) - #创建后就可以编辑item,用户自己起名字. - self.leftWidget.editItem(item) - - - -#删除分组 - def DeleteItem(self): - self.leftWidget.takeItem(self.leftWidget.currentRow()) - - #重命名分组 - def RenameItem(self): - curRow =self.leftWidget.currentRow() - item=self.leftWidget.item(curRow) - item.setFlags(item.flags() | Qt.ItemIsEditable) - self.leftWidget.editItem(item) - self.leftWidget.itemChanged.connect(lambda :self.ChangeItem(item)) - - - def ChangeItem(self,item): - print("test") - diff --git a/utils/BasicUtils.py b/utils/BasicUtils.py index 6d1476a..00974f7 100644 --- a/utils/BasicUtils.py +++ b/utils/BasicUtils.py @@ -74,7 +74,8 @@ def get_todo_list(): # try: if json_file['itemType'] == 'ToDoList': # print(json_file['title'], json_file['uid'], '列表') - return_todo_list.append([json_file['title'], json_file['uid'], json_file['updatedAt']]) + return_todo_list.append( + [json_file['title'], json_file['uid'], json_file['updatedAt'], json_file['icon']]) # print(return_todo_list) return_todo_list.sort(key=get_third) @@ -188,7 +189,6 @@ def remove_todo_list(uid): # print(os.path.join(root, name)) os.remove(os.path.join(root, name)) - # print(read_init_file()) # webdav_hostname = read_init_file() # print(webdav_hostname[2]) @@ -196,4 +196,4 @@ def remove_todo_list(uid): # print(get_todo('3f1e033f-2051-4c04-b7f6-afd2eb1f54f4')) # print(load_myday_important('Important')) # change_myday_important_conf('Important', 'theme', 2) -# print(get_myday_important_conf('Important','Theme')) \ No newline at end of file +# print(get_myday_important_conf('Important','Theme')) diff --git a/utils/CreateToDo.py b/utils/CreateToDo.py index 60bf917..43a02dd 100644 --- a/utils/CreateToDo.py +++ b/utils/CreateToDo.py @@ -28,7 +28,7 @@ def CreateToDo(item_type, name, todo_list_uid=None): if not os.path.exists(todo_list_path): os.mkdir(todo_list_path) default_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') - print(''+uid) + print('' + uid) if item_type == 'ToDoList': # print(item_type) try: @@ -49,6 +49,7 @@ def CreateToDo(item_type, name, todo_list_uid=None): "title": name, "uid": uid, "Theme": '0', + "icon": '星宿', "updatedAt": default_time } # library = { @@ -82,10 +83,39 @@ def CreateToDo(item_type, name, todo_list_uid=None): with open(todo_list_path + '{' + uid + '}.otl', 'w') as f: f.write(json.dumps(out_config, indent=4, ensure_ascii=False)) return uid - except IOError as e: print(e) return False + +def create_myday_important(item_type, name): + uid = str(uuid.uuid4()) + config_path = BasicUtils.return_work_dir() + todo_list_path = config_path + 'ToDoList/' + if not os.path.exists(todo_list_path): + os.mkdir(todo_list_path) + default_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + print('' + uid) + out_config = { + "createdAt": default_time, + "done": False, + "dueTo": '', + "itemType": item_type, + "notes": "", + "isMyDay": False, + "isImportant": False, + "title": name, + "uid": uid, + "updatedAt": default_time + } + try: + if item_type == 'MyDay': + with open(todo_list_path + '{' + uid + '}.otl', 'w') as f: + f.write(json.dumps(out_config, indent=4, ensure_ascii=False)) + return uid + except IOError as e: + print(e) + return False + # # CreateToDo('ToDo', 'test1', '3f1e033f-2051-4c04-b7f6-afd2eb1f54f4') diff --git a/view/AddToDoLabel.py b/view/AddToDoLabel.py index 8082777..bcdd7b2 100644 --- a/view/AddToDoLabel.py +++ b/view/AddToDoLabel.py @@ -38,11 +38,3 @@ class AddToDoAction(QLabel): self.setLayout(layout) self.show() - # def line_edit_action(self): - # print('click left button') - - # # 回车添加事件 - # def line_edit_add(self, name): - # self.todo_name.emit(name) - # print(name) - # self.line_edit.clear() diff --git a/view/ImportantView.py b/view/ImportantView.py index 2d603d2..bc216a4 100644 --- a/view/ImportantView.py +++ b/view/ImportantView.py @@ -8,6 +8,7 @@ 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 @@ -36,6 +37,9 @@ class Important(QWidget): head_widget = QWidget(self) self.todo_list = QListWidget() + + # 关闭滚动条 + self.todo_list.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.todo_list.setObjectName('todo_list') # 添加ToDo的标签 @@ -43,24 +47,14 @@ class Important(QWidget): 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.setPlaceholderText('添加任务') - # head_widget.setMaximumHeight(100) - # head_widget. - # head_widget.setObjectName('head_widget') head_widget.setAttribute(Qt.WA_StyledBackground) - # self.setStyleSheet('#head_widget{margin:50px}') - - # head_widget.setPalette(palette) head_widget.setLayout(head_layout) head_layout.setAlignment(Qt.AlignCenter) - # head_left_layout = QVBoxLayout() - # layout.addStretch(0) + layout.addWidget(head_widget, 2, Qt.AlignTop) - # layout.addSpacing(1) - # layout.addStretch(1) - # layout.addStretch(0) + layout.addWidget(self.todo_list, 6, Qt.AlignCenter | Qt.AlignTop) head_label = QLabel("重要") head_label.setObjectName('head_label') @@ -163,7 +157,6 @@ class Important(QWidget): self.todo_list.addItem(todo_item) self.todo_list.setItemWidget(todo_item, todo_item.widget) - # todo : 下面的方法实现点击更换主题的功能 def menu_action(self, count): # 点击按钮 count = str(count) @@ -178,7 +171,9 @@ class Important(QWidget): if name: self.add_todo.todo_name.emit(name) # print('添加的新ToDo:' + name) - todo_item = ToDoItem(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() @@ -200,28 +195,30 @@ class Important(QWidget): del_action = QAction("删除", self) # 查看右键时是否在item上面,如果不在.就不显示删除和修改. - pop_menu.addAction(rename_action) 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(self.make_important) + mark_important.triggered.connect(lambda: self.make_action('Important')) pop_menu.exec_(self.todo_list.mapToGlobal(position)) - def make_important(self): + def make_action(self, make_type): # print(self.todo_list.currentRow()) - 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] - self.todo_list.takeItem(self.todo_list.currentRow()) - # print(' uid:', uid) - change_value(uid, 'isImportant', False) - # 暂时不需要发送信号 + 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() # 删除分组 @@ -257,9 +254,6 @@ class Important(QWidget): self.dialog.exec_() - # 重命名发送信号 - # self.update_signal.emit() - def change_name(self, item_name): print(item_name) my_day_list = load_myday_important('Important') diff --git a/view/MyDayView.py b/view/MyDayView.py index f03d470..12beb51 100644 --- a/view/MyDayView.py +++ b/view/MyDayView.py @@ -3,7 +3,7 @@ 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 +from utils.BasicUtils import load_myday_important, remove_todo_list, change_value, change_myday_important_conf from utils.CreateToDo import CreateToDo from view.AddToDoLabel import AddToDoAction from view.MyDayHeadLabel import HeadLabel @@ -41,6 +41,8 @@ class MyDay(QWidget): head_widget.setAttribute(Qt.WA_StyledBackground) self.todo_list = QListWidget() + # 关闭滚动条 + self.todo_list.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.todo_list.setFrameShape(QListWidget.NoFrame) self.todo_list.setObjectName('todo_list') @@ -86,6 +88,15 @@ class MyDay(QWidget): 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) + self.menu_image.addAction(refresh_label) + theme_label = QAction(self) theme_label.setText('主题') theme_label.setDisabled(True) @@ -121,12 +132,10 @@ class MyDay(QWidget): 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) - # 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]) self.refresh_action() def refresh_action(self): @@ -138,50 +147,28 @@ class MyDay(QWidget): for my_day in my_day_list: self.load_myday(my_day[0], my_day[1]) - # def initUI(self): - # print('(initUI)') - # # thread_action = ThreadAction() - # # thread_action.change_value_action.connect() - # - # self.my_day_list = load_myday_important('Important') - # - # if self.my_day_list: - # for my_day in self.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) - def menu_action(self, count): count = str(count) # 点击按钮 - + change_myday_important_conf('MyDay', 'theme', 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) - + todo_item = ToDoItem(name) 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): @@ -201,34 +188,42 @@ class MyDay(QWidget): del_action = QAction("删除", self) # 查看右键时是否在item上面,如果不在.就不显示删除和修改. - pop_menu.addAction(rename_action) 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(self.make_important) + mark_important.triggered.connect(lambda: self.make_action('Important')) + pop_menu.exec_(self.todo_list.mapToGlobal(position)) - def make_important(self): + # 设置右键点击事件 + def make_action(self, make_type): # print(self.todo_list.currentRow()) - 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] - self.todo_list.takeItem(self.todo_list.currentRow()) - # print(' uid:', uid) - change_value(uid, 'isImportant', True) - # 暂时不需要发送信号 + load_todo = load_myday_important(make_type) + uid = load_todo[self.todo_list.currentRow()][1] + if make_type == 'MyDay': + change_value(uid, 'isMyDay', False) + self.todo_list.takeItem(self.todo_list.currentRow()) + elif make_type == 'Important': + change_value(uid, 'isImportant', True) + self.refresh_action() + + # + # load_todo = load_myday_important('MyDay') + # uid = load_todo[self.todo_list.currentRow()][1] + 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') + my_day_list = load_myday_important('MyDay') # 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) @@ -236,16 +231,32 @@ class MyDay(QWidget): 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) - item.setFlags(item.flags() | Qt.ItemIsEditable) - self.todo_list.editItem(item) - self.todo_list.itemChanged.connect(lambda: self.ChangeItem(item)) - def ChangeItem(self, item): - print(item) + 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())) - print("test") + 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() diff --git a/view/SelfListWidgetItem.py b/view/SelfListWidgetItem.py index 2bd96c9..fadb0d7 100644 --- a/view/SelfListWidgetItem.py +++ b/view/SelfListWidgetItem.py @@ -26,8 +26,6 @@ class SelfListWidgetItem(QListWidgetItem): self.widget = QWidget() self.widget.setLayout(layout) - # self.list_item = QLabel('') - # 添加左边的图标和右边的气泡 if self.show_icon: self.icon_label = QLabel('') diff --git a/view/ToDoItem.py b/view/ToDoItem.py index 257c92f..1abbb23 100644 --- a/view/ToDoItem.py +++ b/view/ToDoItem.py @@ -42,15 +42,16 @@ class ToDoItem(QListWidgetItem): layout.addWidget(self.todo_label, 6) layout.addWidget(self.important_button, 2) - self.mark_icon.clicked.connect(self.set_done) + self.mark_icon.clicked.connect(lambda: self.set_done(uid)) # print('', uid) self.important_button.clicked.connect(lambda: self.set_important(uid)) # self.mark_icon.trans_signal.connect(self.set_done) - def set_done(self): - self.mark_icon.setIcon(QIcon(os.getcwd()+'/../images/finished.svg')) - # time.sleep(0.2) + def set_done(self, uid): + self.mark_icon.setIcon(QIcon(os.getcwd() + '/../images/finished.svg')) + time.sleep(0.2) + change_value(uid, 'done', True) pass def set_myday(self, uid): @@ -61,7 +62,7 @@ class ToDoItem(QListWidgetItem): # important = Important() # important.load_important.emit() # self.action.emit() - print('',uid) + print('', uid) change_value(uid, 'isImportant', True) # self.transaction.emit() diff --git a/view/ToDoListView.py b/view/ToDoListView.py index f2b95fd..ce611c1 100644 --- a/view/ToDoListView.py +++ b/view/ToDoListView.py @@ -36,6 +36,8 @@ class ToDoList(QWidget): # head_widget.setMinimumHeight(175) self.todo_list = QListWidget() + # 关闭滚动条 + self.todo_list.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.todo_list.setObjectName('todo_list') # 添加ToDo的标签 @@ -43,24 +45,13 @@ class ToDoList(QWidget): 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.setPlaceholderText('添加任务') - - # head_widget.setMaximumHeight(100) - # head_widget. - # head_widget.setObjectName('head_widget') head_widget.setAttribute(Qt.WA_StyledBackground) - # self.setStyleSheet('#head_widget{margin:50px}') - - # head_widget.setPalette(palette) head_widget.setLayout(head_layout) head_layout.setAlignment(Qt.AlignCenter) - # head_left_layout = QVBoxLayout() - # layout.addStretch(0) + layout.addWidget(head_widget, 2, Qt.AlignTop) - # layout.addSpacing(1) - # layout.addStretch(1) - # layout.addStretch(0) + layout.addWidget(self.todo_list, 6, Qt.AlignCenter | Qt.AlignTop) head_label = QLabel(list_name) head_label.setObjectName('head_label') @@ -102,15 +93,7 @@ class ToDoList(QWidget): 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') @@ -152,9 +135,9 @@ class ToDoList(QWidget): # thread_action = ThreadAction() self.load_theme() - self.loadtodo = get_todo(self.uid) - if self.loadtodo: - for load in self.loadtodo: + load_todo = get_todo(self.uid) + if load_todo: + for load in load_todo: self.load_todo(load[0], load[1]) def load_theme(self): @@ -186,15 +169,16 @@ class ToDoList(QWidget): # self.my_day_list[] self.todo_list.clear() # print(self.my_day_list) - self.loadtodo = get_todo(self.uid) - if self.loadtodo: - for load in self.loadtodo: + load_todo = get_todo(self.uid) + if load_todo: + for load in load_todo: self.load_todo(load[0], load[1]) 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) @@ -220,25 +204,28 @@ class ToDoList(QWidget): del_action = QAction("删除", self) # 查看右键时是否在item上面,如果不在.就不显示删除和修改. - pop_menu.addAction(rename_action) + # pop_menu.addAction(rename_action) 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(self.make_important) + mark_important.triggered.connect(lambda: self.make_action('Important')) pop_menu.exec_(self.todo_list.mapToGlobal(position)) - def make_important(self): - print(self.todo_list.currentRow()) + def make_action(self, make_type): + # print(self.todo_list.currentRow()) load_todo = get_todo(self.uid) uid = load_todo[self.todo_list.currentRow()][1] - # print(' uid:', uid) - change_value(uid, 'isImportant', True) + if make_type == 'MyDay': + change_value(uid, 'isMyDay', True) + elif make_type == 'Important': + change_value(uid, 'isImportant', True) + self.update_signal.emit() # 删除分组 @@ -254,21 +241,38 @@ class ToDoList(QWidget): # 重命名分组 # todo : 复制重要代码 def rename_item(self): - curRow = self.todo_list.currentRow() - item = self.todo_list.item(curRow) - item.setFlags(item.flags() | Qt.ItemIsEditable) - self.todo_list.editItem(item) - self.todo_list.itemChanged.connect(lambda: self.ChangeItem(item)) + 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) + load_todo = get_todo(self.uid) + # load_todo = get_todo(my_day_list[self.todo_list.currentRow()][1]) + uid = load_todo[self.todo_list.currentRow()][1] + change_value(uid, 'title', item_name) + # 重命名发送信号 + self.refresh_action() self.update_signal.emit() - - def ChangeItem(self, item): - print(item) - - print("test") + self.dialog.close() def mark_done(self, uid): print('mark done:', uid) - + self.update_signal.emit() def mark_important(self, uid): + self.update_signal.emit() pass