问题描述
我在使用这个应用程序时遇到了很多问题,因为我还不够好,但我已经快完成了,只是想完成它,这样我就可以继续进行一些稍低级别的项目。
>这是一个 tkinter 待办事项应用程序。
您可以将任务添加到列表框
对于每个Task
,都有一些相关的属性,其中包括:````self.value = vand
self.connectivity = c. The hierarchy of the tasks displayed in the listbox is determined by the value of
val_var```(例如值越高,它在列表中显示的越高)。
任务和相关属性由用户在创建另一个任务时的输入决定。
Task
附加到列表 task_list
并且在用户向列表中添加了 1 个以上的任务后,下次添加任务时,可以选择检查以某种方式连接的现有任务。
列表已排序,因此具有最高值 (val_var
) 的任务显示在列表框的顶部,而具有最低值的任务显示在列表框的底部。
您可以“保存任务”,然后稍后启动应用程序,然后您可以“加载任务”。
问题 1:
从保存的 .dat 文件加载任务后,它会按照保存的顺序显示在列表框中。 但是,如果您现在想添加另一个任务,至少会发生两件不受欢迎的事情:
- 现在加载到列表框中的任务在添加新任务时不显示为复选按钮。
- 当您添加另一个任务时(同样是在加载 .dat 文件后),列表框将删除刚刚加载的内容,列表框将只显示新添加的任务。
我对能够从 .dat 文件加载 Tasks
实例然后将它们附加到 task_list 以某种方式感兴趣,以便它们成为应用程序当前会话/实例的一部分,但我不不知道怎么做。
问题 2:
在任务已添加到列表框的给定会话中,可以使用“删除任务”按钮从列表框中删除它们。 Listbox 中的选定任务被删除,但与从 task_list
中删除的任务不同。
为了测试我的意思,可以将几个任务添加到列表框,然后删除一个。请注意,在尝试创建另一个新任务时,刚刚从列表框中删除的任务仍将显示为复选按钮 - 但是,未刚刚删除的另一个任务现在已作为复选按钮消失。
真诚地感谢您对这些问题的任何帮助。
代码如下:
from tkinter import Tk,Frame,Button,Entry,Label,OptionMenu,Toplevel,StringVar,Checkbutton,DoubleVar
import tkinter.messagebox
import pickle
root = Tk()
task_list = []
class Task:
def __init__(self,n,i,h,v,c):
self.name = n
self.impact = i
self.hours = h
self.value = v
self.connectivity = c
def open_add_task():
taskwin = Toplevel(root)
#NAME
titlelabel = Label(taskwin,text='Title task concisely:').grid(column=1,row=0)
name_entry = Entry(taskwin,width=40,justify='center')
name_entry.grid(column=1,row=1)
#IMPACT
impactlabel = Label(taskwin,text='Impact').grid(column=1,row=2)
imp_var = StringVar(value=0)
OptionMenu(taskwin,imp_var,*range(0,10+1)).grid(column=1,row=3,sticky='ns')
#HOURS(required)
hourlabel = Label(taskwin,text='Whole hours \n required').grid(column=1,row=16)
hour_entry = Entry(taskwin,width=4,justify='center')
hour_entry.grid(column=1,row=17)
#CONNECTIVITY
C_lab = Label(taskwin,text="Connectivity to other tasks").grid(column=1,row=18)
placement=19
vars = [] # list to hold the DoubleVar used by Checkbutton
for task in task_list:
# add a DoubleVar to the list
vars.append(DoubleVar())
# use the task.value as the "onvalue" option
Checkbutton(taskwin,text=task.name,variable=vars[-1],onvalue=task.value,offvalue=0).grid(column=1,row=placement,sticky="w")
placement+=1
def add_task():
if name_entry.get() != '': # If textbox inputfield is NOT empty do this
#CONNECTIVITY
connectivity = sum(v.get() for v in vars)/10 +1 #if no connectivity the rest below is multiplied by 1
#VALUE
val_var = ((((int(imp_var.get())/5) + 1) * (connectivity)+(float(hour_entry.get())/10))) #-(float(hour_entry.get())/20) #-hours fra højere rangerende opgaver skal minusses urgency_var # c = 1+task1(int(imp_var.get())+(int(man_var))+task2(repeat)+task3(repeat)
task_list.append(Task(name_entry.get(),imp_var.get(),hour_entry.get(),val_var,connectivity))
reload()
taskwin.destroy()
else:
tkinter.messagebox.showwarning(title='Whoops',message='You must enter a task')
Add_button = Button(taskwin,text='Add',command=add_task).grid(column=1,sticky="ew")
placement+=1
def reload():
task_list.sort(key=lambda a: a.value,reverse=True)
listbox_tasks.delete(0,tkinter.END)
for x in task_list:
listbox_tasks.insert(tkinter.END,x.name)
def delete_task():
try:
task_index = listbox_tasks.curselection()[0]
listbox_tasks.delete(task_index)
tasks = listbox_tasks.get(0,listbox_tasks.size())
pickle.dump(tasks,open('Todo.dat','wb'))
del task_list[0]
except:
tkinter.messagebox.showwarning(title='Error',message='You must select a task to delete')
def save_tasks():
tasks = listbox_tasks.get(0,listbox_tasks.size())
pickle.dump(tasks,'wb'))
def load_tasks():
try:
tasks = pickle.load(open('Todo.dat','rb'))
listbox_tasks.delete(0,tkinter.END)
for task in tasks:
listbox_tasks.insert(tkinter.END,task)
except:
tkinter.messagebox.showwarning(title='Error',message='You have no tasks')
# Create UI
your_tasks_label = Label(root,text='Your tasks:',font=('roboto',11,'bold'),justify='center')
your_tasks_label.pack(pady=5)
scrollbar_tasks = tkinter.Scrollbar(root)
scrollbar_tasks.pack(side=tkinter.RIGHT,fill=tkinter.Y)
listbox_tasks = tkinter.Listbox(root,height=10,width=45,font=('',fg=('grey'),justify='center') # tkinter.Listbox(where it should go,height=x,width=xx)
listbox_tasks.pack(padx=5,pady=5)
listbox_tasks.config(yscrollcommand=scrollbar_tasks.set)
scrollbar_tasks.config(command=listbox_tasks.yview)
#BUTTONS
New_Task_Button = Button(root,text='New Task',width=42,command=open_add_task)
New_Task_Button.pack()
button_delete_task = Button(root,text='Delete task',command=delete_task)
button_delete_task.pack()
button_save_tasks = Button(root,text='Save tasks',command=save_tasks)
button_save_tasks.pack()
button_load_tasks = Button(root,text='Load tasks',command=load_tasks)
button_load_tasks.pack(pady=5)
root.mainloop()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)