摘要:我在互聯網上搜索了 tkinter 的其他主題。我找到了 ttkthemes - ThemedTk 選項。但是,我的應用程式是在課堂上創建的。與模塊網站中顯示的示例不同,themedtk 示例應用的是 root 方法。這是代碼:
import os
from tkinter import *
import tkinter as tk
from tkinter import ttk, filedialog
from PIL import ImageTk, Image
from ttkthemes import ThemedTk,THEMES
class App(tk.Tk):
def __init__(self):
super().__init__()
self.style = ThemedTk
self.title(dil_sec[0])
self.geometry("800x600")
self.my_notebook = ttk.Notebook(self)
self.my_notebook.pack(pady=15)
self.my_menu = Menu(self)
self.config(menu=self.my_menu)
rec = None
id_num = None
self.first_lane = Menu(self.my_menu)
self.my_menu.add_cascade(label=dil_sec[6], menu=self.first_lane)
self.first_lane.add_command(label=dil_sec[2], command=self.customer_list)
self.first_lane.add_command(label=dil_sec[1], command=lambda: self.customer_add(rec, id_num))
self.second_lane = Menu(self.my_menu)
self.my_menu.add_cascade(label=dil_sec[3], menu=self.second_lane)
self.third_lane = Menu(self.my_menu)
self.my_menu.add_cascade(label= dil_sec[65], menu=self.third_lane)
self.third_lane.add_command(label=THEMES[0],command=lambda: self.stil_changer(still=THEMES[0]))
self.third_lane.add_command(label=THEMES[1],command=lambda: self.stil_changer(still=THEMES[1]))
def stil_changer(self,still):
print(still)
self.style.set_theme(self,theme_name=still)
if __name__ == "__main__":
app = App()
app.mainloop()
當我運行應用程式并單擊樣式并選擇一種樣式時。我收到此錯誤:
AttributeError:“_tkinter.tkapp”物件沒有屬性“_toplevel”
我花了很多時間來解決它。提前致謝。
uj5u.com熱心網友回復:
你忘()了排隊
self.style = ThemedTk()
然后你必須self洗掉
self.style.set_theme(theme_name=still)
現在它運行沒有錯誤,但它仍然沒有改變主題。
也許它需要使用來自ttk.
編輯:
您必須使用ThemedTk. tk.Tk并直接使用self.set_theme()
當然,您需要一些來自ttk.
import tkinter as tk
import tkinter.ttk as ttk
from ttkthemes import ThemedTk
class App(ThemedTk):
def __init__(self):
super().__init__()
self.geometry("800x600")
self.my_notebook = ttk.Notebook(self)
self.my_notebook.pack(pady=15, fill='both', expand=True)
self.frame = ttk.Frame(self.my_notebook)
self.my_notebook.add(self.frame, text='Buttons')
for number in range(10):
b = ttk.Button(self.frame, text=str(number))
b.pack()
self.my_menu = tk.Menu(self)
self.config(menu=self.my_menu)
self.first_lane = tk.Menu(self.my_menu)
self.first_lane.add_command(label='a')
self.first_lane.add_command(label='b')
self.my_menu.add_cascade(label='Menu1', menu=self.first_lane)
self.second_lane = tk.Menu(self.my_menu)
self.my_menu.add_cascade(label='Menu2', menu=self.second_lane)
self.third_lane = tk.Menu(self.my_menu)
self.my_menu.add_cascade(label='Style', menu=self.third_lane)
for item in sorted(self.get_themes()):
self.third_lane.add_command(label=item, command=lambda name=item: self.changer_theme(name))
def changer_theme(self, name):
print('theme:', name)
self.set_theme(name)
if __name__ == "__main__":
app = App()
app.mainloop()

或者你可以使用Tkwith ThemedStyle(而不是ThemedTk)
然后你可以設定self.style = ThemedStyle()
但你必須使用self.style.theme_use(name)而不是self.set_theme(name)
它需要self.style.get_themes()而不是self.get_themes().
import tkinter as tk
import tkinter.ttk as ttk
from ttkthemes import ThemedStyle
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("800x600")
self.style = ThemedStyle() # with Tk and ThemedStyle
self.my_notebook = ttk.Notebook(self)
self.my_notebook.pack(pady=15, fill='both', expand=True)
self.frame = ttk.Frame(self.my_notebook)
self.my_notebook.add(self.frame, text='Buttons')
for number in range(10):
b = ttk.Button(self.frame, text=str(number))
b.pack()
self.my_menu = tk.Menu(self)
self.config(menu=self.my_menu)
self.first_lane = tk.Menu(self.my_menu)
self.first_lane.add_command(label='a')
self.first_lane.add_command(label='b')
self.my_menu.add_cascade(label='Menu1', menu=self.first_lane)
self.second_lane = tk.Menu(self.my_menu)
self.my_menu.add_cascade(label='Menu2', menu=self.second_lane)
self.third_lane = tk.Menu(self.my_menu)
self.my_menu.add_cascade(label='Style', menu=self.third_lane)
#for item in sorted(self.get_themes()): # with ThemedTk
for item in sorted(self.style.get_themes()): # with Tk and ThemedStyle
self.third_lane.add_command(label=item, command=lambda name=item: self.changer_theme(name))
def changer_theme(self, name):
print('theme:', name)
#self.set_theme(name) # with ThemedTk
self.style.theme_use(name) # with Tk and ThemedStyle
if __name__ == "__main__":
app = App()
app.mainloop()
I found screenshots for all themes: 
Blue:

Kroc:

Radiance or Ubuntu:

Winxpblue:

Source keep on GitHub: furas / python-examples / tkinter / themes-change-ttkthemes / buttons
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456997.html
