样式在类中对任何对象都不起作用



为什么我的样式不改变这些对象的背景?我很生气,只是把他们分配给了一切。还有为什么它有两个窗口?我看到这与样式与对象选项中的样式不同有关......我觉得它也是我的班级,我应该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()

尽管这是主观的并且实现了相同的目标。

相关内容

  • 没有找到相关文章

最新更新