gpt4 book ai didi

python - 我可以在一个 Tkinter (tk.Tk) 根窗口中使用两个不同的 TTK 主题吗?

转载 作者:行者123 更新时间:2023-11-30 22:35:46 25 4
gpt4 key购买 nike

这个问题涉及Python和Tkinter。

我想同时使用两个不同的 ttk 主题,例如一个 Tkinter 窗口中的“clam”和“vista”。所以我写了这个:

import tkinter as tk
import tkinter.ttk as ttk

class GUI(tk.Tk):

def __init__(self):

super().__init__()
Button_v1()
Button_v2()


class Button_v1(ttk.Button):

def __init__(self, default_text="Test"):

super().__init__(text=default_text)

s = ttk.Style()
s.theme_use('clam')
s.configure(self.winfo_class(), foreground='blue')
self.pack()


class Button_v2(ttk.Button):

def __init__(self, default_text="Test2"):

super().__init__(text=default_text)

s2 = ttk.Style()
s2.theme_use('vista')
s2.configure(self.winfo_class(), foreground='red')
self.pack()


GUI().mainloop()

但是代码加载了:

  1. 我希望第一个 Button 的前景为蓝色,第二个 Button 的前景为红色,并使用两个单独的主题。

  2. 相反,两个按钮都有红色前景,并且都应用相同的主题。

是否可以在一个 Tkinter 程序中使用两个单独的 ttk 主题?

最佳答案

不,这是不可能的,因为 theme在此背景下具有全局意义。您可以代表theme作为小部件的一组样式( for widget layout elements, actually ),您可以更改样式和/或创建新的样式,但一次不能使用多个主题,因为小部件的布局严重依赖于它。

当您调用theme_use('theme_name')时tkinter 重建所有小部件的布局和 redraws your entire application ,您可以轻松检查这一点,感谢 <<ThemeChanged>>虚拟事件。

这是一个片段。您将看到由每个按钮和 root 本人引起的三个打印。

try:
import tkinter as tk
import tkinter.ttk as ttk
except ImportError:
import Tkinter as tk
import ttk


class GUI(tk.Tk):
def __init__(self):
super().__init__()
self.bind('<<ThemeChanged>>', lambda event: print('theme changed in root and across all widgets!'))
Button_v1()
Button_v2()


class Button_v1(ttk.Button):
def __init__(self, default_text="Test"):
super().__init__(text=default_text)
s = ttk.Style()
s.theme_use('clam')
s.configure(self.winfo_class(), foreground='blue')
self.pack()


class Button_v2(ttk.Button):
def __init__(self, default_text="Test2"):
super().__init__(text=default_text)
s2 = ttk.Style()
s2.theme_use('vista')
s2.configure(self.winfo_class(), foreground='red')
self.pack()

GUI().mainloop()

如果每个按钮需要不同的前景 - then create a new style对于每个人并使用 style参数:

这是另一个片段:

try:
import tkinter as tk
import tkinter.ttk as ttk
except ImportError:
import Tkinter as tk
import ttk


class GUI(tk.Tk):
def __init__(self):
super().__init__()

s = ttk.Style()
s.configure('blue.TButton', foreground='blue')
s.configure('red.TButton', foreground='red')

Button_v1()
Button_v2()


class Button_v1(ttk.Button):
def __init__(self, default_text="Test"):
super().__init__(text=default_text, style='blue.TButton')
self.pack()


class Button_v2(ttk.Button):
def __init__(self, default_text="Test2"):
super().__init__(text=default_text, style='red.TButton')
self.pack()

GUI().mainloop()

一切都描述得很好herethere .

关于python - 我可以在一个 Tkinter (tk.Tk) 根窗口中使用两个不同的 TTK 主题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44420412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com