pyqt-todolist/view/MyDayView.py

276 lines
11 KiB
Python
Raw Normal View History

2022-04-07 21:11:37 +08:00
import os
import time
2022-04-07 21:11:37 +08:00
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt, pyqtSignal
2022-04-14 16:19:59 +08:00
2022-05-03 18:59:06 +08:00
from utils.BasicUtils import load_myday_important, remove_todo_list, change_value, change_myday_important_conf, \
get_myday_important_conf
from utils.CreateToDo import CreateToDo, create_myday_important
2022-04-14 16:19:59 +08:00
from view.AddToDoLabel import AddToDoAction
2022-04-12 21:34:18 +08:00
from view.MyDayHeadLabel import HeadLabel
2022-04-15 21:33:24 +08:00
from view.ToDoItem import ToDoItem
2022-04-07 21:11:37 +08:00
class MyDay(QWidget):
update_signal = pyqtSignal()
def __init__(self, parent=None):
2022-04-07 21:11:37 +08:00
super(MyDay, self).__init__()
2022-04-12 21:34:18 +08:00
self.setObjectName('my_day')
2022-04-12 21:34:18 +08:00
self.setAttribute(Qt.WA_StyledBackground)
2022-05-03 18:59:06 +08:00
background = get_myday_important_conf('MyDay', 'Theme')
if not background:
background = '0'
2022-05-11 08:33:54 +08:00
self.setStyleSheet('#my_day{background-image:url("../images/' + background + '.jpg");border-radius: 10px;}')
2022-04-12 21:34:18 +08:00
# 下面这一句有问题,需要修复修改主题的实现方法
# self.setStyleSheet('#my_day{background-image:url("../images/2.jpg");')
2022-04-07 21:11:37 +08:00
# 布局样式:最外面一个大的垂直布局,里面的最上面标题是一个水平布局,水平布局显示的是一个垂直布局和一个右边的选项,用来更换背景
2022-04-12 21:34:18 +08:00
# 布局样式继承QWidget,里面一个垂直布局最上面一个QWidget用来设置头部布局
# 头部QWidget里面一个水平布局水平布局里面一个QWidget方便设置整体位置然后是一个
2022-04-14 16:19:59 +08:00
layout = QVBoxLayout() # 总布局
2022-04-14 21:22:47 +08:00
head_layout = QHBoxLayout() # 头部总布局
2022-04-12 21:34:18 +08:00
head_widget = QWidget(self)
2022-04-12 21:34:18 +08:00
head_widget.setAttribute(Qt.WA_StyledBackground)
self.todo_list = QListWidget()
# 关闭滚动条
self.todo_list.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
2022-04-15 21:33:24 +08:00
self.todo_list.setFrameShape(QListWidget.NoFrame)
self.todo_list.setObjectName('todo_list')
2022-04-12 21:34:18 +08:00
2022-04-16 21:45:29 +08:00
# 最下面的添加ToDo标签
2022-04-14 16:19:59 +08:00
self.add_todo = AddToDoAction()
2022-04-15 21:33:24 +08:00
self.add_todo.line_edit.returnPressed.connect(lambda: self.line_edit_add(self.add_todo.line_edit.text()))
2022-04-14 21:22:47 +08:00
self.add_todo.setAlignment(Qt.AlignCenter)
2022-04-15 21:33:24 +08:00
# self.add_todo.todo_name.connect(self.add_todo_action)
2022-04-14 16:19:59 +08:00
2022-04-12 21:34:18 +08:00
head_widget.setLayout(head_layout)
head_layout.setAlignment(Qt.AlignCenter)
# head_left_layout = QVBoxLayout()
layout.addWidget(head_widget, 2, Qt.AlignTop)
# layout.addStretch(1)
2022-04-16 21:45:29 +08:00
# layout.addSpacing(1)
2022-04-14 16:19:59 +08:00
self.head_label = HeadLabel()
layout.addWidget(self.todo_list, 6, Qt.AlignCenter | Qt.AlignTop)
2022-04-14 16:19:59 +08:00
head_layout.addWidget(self.head_label, 8)
2022-04-14 16:19:59 +08:00
layout.addWidget(self.add_todo, 2, Qt.AlignHCenter)
2022-04-12 21:34:18 +08:00
self.menu_image = QPushButton()
self.menu_image.setObjectName('menu_image')
self.menu_image.setFixedSize(30, 30)
2022-04-12 21:34:18 +08:00
# self.menu_image.setScaledContents(True)
pic_btn = QPixmap(os.getcwd() + "/../images/menu.png")
self.menu_image.setIcon(QIcon(pic_btn))
2022-04-14 21:22:47 +08:00
head_layout.addWidget(self.menu_image, 2)
2022-04-12 21:34:18 +08:00
head_layout.addStretch(1)
2022-04-07 21:11:37 +08:00
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)
self.menu_image.addAction(refresh_label)
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)
2022-04-21 22:42:43 +08:00
self.refresh_action()
def refresh_action(self):
# self.my_day_list[]
self.todo_list.clear()
# print(self.my_day_list)
2022-04-21 22:42:43 +08:00
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])
2022-04-21 22:42:43 +08:00
def load_myday(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))
2022-04-21 22:42:43 +08:00
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;'
'}')
# 回车添加事件
2022-04-15 21:33:24 +08:00
def line_edit_add(self, name):
2022-04-23 17:36:22 +08:00
if name:
self.add_todo.todo_name.emit(name)
# print('添加的新ToDo' + name)
create_todo = CreateToDo('Todo', name)
change_value(create_todo, 'isMyDay', True)
todo_item = ToDoItem(name, create_todo)
2022-04-23 17:36:22 +08:00
self.todo_list.addItem(todo_item)
self.todo_list.setItemWidget(todo_item, todo_item.widget)
self.add_todo.line_edit.clear()
self.update_signal.emit()
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)
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())
# print(make_type)
load_todo = load_myday_important('MyDay')
# print(load_todo)
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()
self.update_signal.emit()
# 删除分组
def delete_item(self):
# print(self.load_list[self.system_listWidget.currentRow() - 2][1])
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)
# change_value(uid,'isImportant',False)
self.todo_list.takeItem(self.todo_list.currentRow())
self.update_signal.emit()
# 重命名分组
def rename_item(self):
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)
if item_name:
my_day_list = load_myday_important('MyDay')
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)
# self.todo_list.mark_icon.setIcon(QIcon(os.getcwd() + '/../images/finished.svg'))
change_value(uid, 'done', True)
# time.sleep(0.5)
self.todo_list.takeItem(self.todo_list.currentRow())
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()