如何在我的程序中添加深色和浅色主题?

问题描述

我以前用同样的代码来过这里,但我不能让它正常工作。我正在为高中的计算机科学项目制作待办事项列表程序,并希望为其添加暗模式。我该怎么做?该程序在 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()

注意:确保您在按钮之前定义了两个函数(将代码粘贴在按钮之前),否则会出现错误,因为函数不是尚未定义

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...