Ubuntu 如何让ttk使用OS主题?
我正在kubuntu上运行python 3.7,工作区主题为“微风黑暗”。我的应用程序中的tk小部件正确地采用了操作系统的主题,但ttk小部件使用了其他东西 有没有办法让我的ttk小部件使用操作系统的主题Ubuntu 如何让ttk使用OS主题?,ubuntu,tkinter,themes,ttk,python-3.7,Ubuntu,Tkinter,Themes,Ttk,Python 3.7,我正在kubuntu上运行python 3.7,工作区主题为“微风黑暗”。我的应用程序中的tk小部件正确地采用了操作系统的主题,但ttk小部件使用了其他东西 有没有办法让我的ttk小部件使用操作系统的主题 import tkinter as tk from tkinter import ttk class App: def __init__(self, master): master.title("ttk vs tk widget example")
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self, master):
master.title("ttk vs tk widget example")
# tk example gui
tk_frame = tk.Frame(master)
tk_frame.pack()
self.tk_label = tk.Label(tk_frame, text="tk label:")
self.var1 = tk.StringVar(value="tk entry")
self.tk_entry = tk.Entry(tk_frame, textvariable=self.var1)
self.tk_quit_button = tk.Button(tk_frame,
text="Quit", width=20,
command=tk_frame.quit)
self.tk_button = tk.Button(tk_frame,
text="tk button", width=20)
self.tk_label.grid(row=0, column=0)
self.tk_entry.grid(row=0, column=1)
self.tk_button.grid(row=1, column=0, sticky='e')
self.tk_quit_button.grid(row=1, column=1, sticky='e')
separator = tk.Frame(height=2, bd=1, relief=tk.SUNKEN)
separator.pack(fill=tk.X, padx=5, pady=15)
# ttk example gui
ttk_frame = ttk.Frame(master)
ttk_frame.pack()
self.ttk_label = ttk.Label(ttk_frame, text="ttk label:")
self.var2 = tk.StringVar(value="ttk entry")
self.ttk_entry = ttk.Entry(ttk_frame, textvariable=self.var2)
self.ttk_quit_button = ttk.Button(ttk_frame,
text="Quit", width=20,
command=ttk_frame.quit)
self.ttk_button = ttk.Button(ttk_frame,
text="ttk button", width=20)
self.ttk_label.grid(row=0, column=0)
self.ttk_entry.grid(row=0, column=1)
self.ttk_button.grid(row=1, column=0, sticky='e')
self.ttk_quit_button.grid(row=1, column=1, sticky='e')
root = tk.Tk()
app = App(root)
root.mainloop()
ttk与tk小部件的示例:
编辑:
所以这不是一个真正的解决方案,但我可以通过以下方式设置正确的颜色:
tk_bg = self.tk_label.cget("background")
tk_fg = self.tk_label.cget("foreground")
self.ttk_label = ttk.Label(ttk_frame, text="ttk label:",
background=tk_bg, foreground=tk_fg)
我使用的是XFCE桌面环境,甚至tk小部件也不适合我使用的主题,这并不奇怪,因为XFCE基于GTK GUI工具包,所以GTK主题没有理由影响tk主题 因此,您需要手动和手动更改GUI的主题 设置
ttk
小部件颜色的唯一方法是通过ttk.Style
:
tk_bg = self.tk_label.cget("background")
tk_fg = self.tk_label.cget("foreground")
tk_entrybg = self.tk_entry.cget("background")
style = ttk.Style(master)
style.configure('TFrame', background=tk_bg)
style.configure('TLabel', background=tk_bg, foreground=tk_fg)
style.configure('TButton', background=tk_bg, foreground=tk_fg)
style.configure('TEntry', background=tk_bg, fieldbackground=tk_entrybg, foreground=tk_fg)
所有ttk小部件都与一个样式相关联(通常是“T+小部件名称”,除了Treeview
,没有额外的“T”)。这些样式由您使用的ttk主题定义。您可以使用style.theme\u use()
更改主题,也可以使用style.theme\u names()
获取可用主题