Я использую Python 3.7 на Kubuntu с темой Workspace «Breeze Dark». Виджеты tk в моем приложении правильно воспринимают тему ОС, но виджеты tk используют что-то другое.
Есть ли способ заставить мои виджеты ttk использовать тему ОС?
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 vs tk:
EDIT:
Так что это не совсем так, но я могу установить правильные цвета с помощью:
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)