【发布时间】:2019-01-17 12:15:39
【问题描述】:
我有不同主题的 tkinter root window 和 toplevel window,但是当我打开 toplevel window 时,它会将 root window 更改为为 toplevel window 设置的主题
我想维护为每个窗口设置的主题。当我关闭顶层窗口并再次打开它时,这会导致错误_tkinter.TclError: Theme MyStyle already exists。
import tkinter as tk
import tkinter.ttk as ttk
def test2():
rt1 = tk.Toplevel()
rt1.geometry("500x500")
s = ttk.Style()
s.theme_create("MyStyle", parent="alt", settings={
"TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0]}},
"TNotebook.Tab": {"configure": {"padding": [50, 8] }}})
s.theme_use("MyStyle")
notebook = ttk.Notebook(rt1)
f1 = tk.Frame(notebook, width=200, height=200)
f2 = tk.Frame(notebook, width=200, height=200)
notebook.add(f1, text="tab 1")
notebook.add(f2, text="tab 2")
notebook.grid(row=0, column=0, sticky="nw")
root = tk.Tk()
root.geometry("500x500")
tree = ttk.Treeview(root, column=("col1", "col2"))
tree.insert("", tk.END, values=("deee", "fjfj","fjjf", "jfjfjf"))
tree.pack()
b3 = tk.Button(root, text="new", command=test2)
b3.place(x=200, y=200)
root.mainloop()
【问题讨论】:
-
"_tkinter.TclError:":
Theme只能是一个并且只能定义一次。因此,在root上定义。更改为"Toplevel.TNotebook": ...以定义 not 应用范围的style。使用ttk.Notebook(rt1, style='Toplevel.TNotebook')应用它 -
不明白
标签: python tkinter styles themes