为什么我的样式不改变这些对象的背景?我很生气,只是把他们分配给了一切。还有为什么它有两个窗口?我看到这与样式与对象选项中的样式不同有关......我觉得它也是我的班级,我应该def _init_(self)
吗?班级?
import tkinter as tk
import tkinter.ttk as ttk
style = ttk.Style()
style.configure("color1.TFrame", foreground = "black", background = "red")
class main:
parent = tk.Tk()
n = ttk.Notebook(parent,style = "color1.TFrame")
f1 = ttk.Frame(n,style = "color1.TFrame") # first page tab
f2 = ttk.Frame(n,style = "color1.TFrame") # second page 2nd tab
window = f1
frame1 = ttk.Frame(window,style = "color1.TFrame")
frame1.grid(row = 1, column = 1, padx = 200, pady = 150)
frame2 = ttk.Frame(window)
frame2.grid(row = 2, column = 1,padx = 200, pady = 150)
main()
似乎
什么都没有出现并且您的样式不起作用的原因是,您实际上并没有绘制所有小部件。
你永远不会告诉下面的小部件在你的窗口上实际绘制:
-
n
-
f1
-
f2
此外,当您调用尚未创建根窗口ttk.Style()
时,会加载第二个窗口。这比我在这里解释的要好得多。
通过将程序更改为以下内容,您可以看到样式确实有效:
import tkinter as tk
import tkinter.ttk as ttk
class main:
parent = tk.Tk()
style = ttk.Style()
style.configure("color1.TFrame", foreground = "black", background = "red")
n = ttk.Notebook(parent,style = "color1.TFrame")
n.pack()
f1 = ttk.Frame(n,style = "color1.TFrame") # first page tab
f2 = ttk.Frame(n,style = "color1.TFrame") # second page 2nd tab
window = f1
f1.pack()
f2.pack()
frame1 = ttk.Frame(window,style = "color1.TFrame")
frame1.grid(row = 1, column = 1, padx = 200, pady = 150)
frame2 = ttk.Frame(window)
frame2.grid(row = 2, column = 1,padx = 200, pady = 150)
main()
可以说,更好的方法是如下所示:
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
style = ttk.Style()
style.configure("color1.TFrame", foreground = "black", background = "red")
class main:
def __init__(self, root):
n = ttk.Notebook(root, style = "color1.TFrame")
f1 = ttk.Frame(n, style = "color1.TFrame")
f2 = ttk.Frame(n, style = "color1.TFrame")
n.pack()
f1.pack()
f2.pack()
frame1 = ttk.Frame(f1, style = "color1.TFrame")
frame2 = ttk.Frame(f1, style = "color1.TFrame")
frame1.grid(row = 1, column = 1, padx = 200, pady = 150)
frame2.grid(row = 2, column = 1,padx = 200, pady = 150)
main(root)
root.mainloop()
尽管这是主观的并且实现了相同的目标。