问题描述
我以前用同样的代码来过这里,但我不能让它正常工作。我正在为高中的计算机科学项目制作待办事项列表程序,并希望为其添加暗模式。我该怎么做?该程序在 python 中,我使用 repl.it 进行开发。另外,请忽略我添加暗模式的尝试,只需查看主程序的代码:)
代码如下:
import tkinter
import tkinter.messageBox
from ttkthemes import ThemedStyle
import tkinter.ttk as ttk
import pickle
import tkinter as tk
root = tkinter.Tk()
root.title("To-Do List")
def add_task():
task = entry_task.get()
if task != "":
listBox_tasks.insert(tkinter.END,task)
entry_task.delete(0,tkinter.END)
else:
tkinter.messageBox.showwarning(title="Warning",message="Please enter a task")
def delete_task():
try:
task_index = listBox_tasks.curselection()[0]
listBox_tasks.delete(task_index)
except:
tkinter.messageBox.showwarning(title="Warning",message="Please select a task first")
def load_tasks():
try:
tasks = pickle.load(open("tasks.dat","rb"))
listBox_tasks.delete(0,tkinter.END)
for task in tasks:
listBox_tasks.insert(tkinter.END,task)
except:
tkinter.messageBox.showwarning(title="Warning",message="Cant find saved task file")
def save_tasks():
tasks = listBox_tasks.get(0,listBox_tasks.size())
pickle.dump(tasks,open("tasks.dat","wb"))
# Dark and light modes
app = tk.Tk()
app.geometry("200x400")
app.title("Themes")
# theme
style = ThemedStyle(app)
style.set_theme("scidgrey")
# theme menu buttons
Def_Btn = tk.Button(app,text='Light mode')
Def_Btn.pack()
Themed_Btn = ttk.Button(app,text='Night mode')
Themed_Btn.pack()
# Scrollbar
Def_Scrollbar = tk.Scrollbar(app)
Def_Scrollbar.pack(side='right',fill='y')
Themed_Scrollbar = ttk.Scrollbar(app,orient='horizontal')
Themed_Scrollbar.pack(side='top',fill='x')
# Entry Widgets
Def_Entry = tk.Entry(app)
Def_Entry.pack()
Themed_Entry = ttk.Entry(app)
Themed_Entry.pack()
# theme chooser gui
frame_tasks = tkinter.Frame(root)
frame_tasks.pack()
listBox_tasks = tkinter.ListBox(frame_tasks,height=10,width=50)
listBox_tasks.pack(side=tkinter.LEFT)
scrollbar_tasks = tkinter.Scrollbar(frame_tasks)
scrollbar_tasks.pack(side=tkinter.RIGHT,fill=tkinter.Y)
listBox_tasks.config(yscrollcommand=scrollbar_tasks.set)
scrollbar_tasks.config(command=listBox_tasks.yview)
entry_task = tkinter.Entry(root,width=50)
entry_task.pack()
button_add_task = tkinter.Button(root,text="Add a task",width=48,command=add_task)
button_add_task.pack()
button_delete_task = tkinter.Button(root,text="Delete a task",command=delete_task)
button_delete_task.pack()
button_load_tasks = tkinter.Button(root,text="Load a task list",command=load_tasks)
button_load_tasks.pack()
button_save_tasks = tkinter.Button(root,text="Save your task list",command=save_tasks)
button_save_tasks.pack()
root.mainloop()
解决方法
例如,您可以定义一个 def darkmode():
函数,您可以在其中 .configure
所有背景(& 和前景)
示例:
def darkmode():
Themed_Entry.configure(bg="black",fg="white")
,
您可以使用 .config
并创建几个功能,并将它们分配给不同的按钮
例如,将窗口等更新为明亮配色方案的灯光模式功能:
def light_theme():
listbox_tasks.config(bg="white",fg="black")
button_add_task.config(highlightbackground='white')
button_delete_task.config(highlightbackground='white')
button_load_tasks.config(highlightbackground='white')
button_save_tasks.config(highlightbackground='white')
entry_task.config(bg='white',fg='black')
这是相应的深色变体:
def dark_theme():
color = '#1f1f1f'
listbox_tasks.config(bg=color,fg="white")
button_add_task.config(highlightbackground=color)
button_delete_task.config(highlightbackground=color)
button_load_tasks.config(highlightbackground=color)
button_save_tasks.config(highlightbackground=color)
entry_task.config(bg=color,fg='white')
上面的代码将按钮的背景更改为十六进制代码 #1f1f1f
,这是一种深灰色,如果您愿意,可以随意更改它(更改 color
变量)。 repl.it 中的按钮似乎没有更新背景颜色,只有边框颜色。
您可以将这些功能分配给您的按钮
Def_Btn = tk.Button(app,text='Light mode',command=light_theme)
Def_Btn.pack()
Themed_Btn = ttk.Button(app,text='Night mode',command=dark_theme)
Themed_Btn.pack()
注意:确保您在按钮之前定义了两个函数(将代码粘贴在按钮之前),否则会出现错误,因为函数不是尚未定义