【问题标题】:Style not working in class for any object?风格不能在课堂上为任何对象工作?
【发布时间】:2017-10-25 03:06:36
【问题描述】:

为什么我的样式没有改变这些对象的背景?我很生气,只是把它们分配给了所有东西。另外,为什么它有两个窗口?我发现这与样式与对象选项中的样式不同有关...我觉得这也与我的班级有关,我想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()

【问题讨论】:

  • 我可以让它在没有课程的情况下工作......
  • 没有任何作用,所以样式没有理由起作用

标签: python class tkinter styles


【解决方案1】:

似乎什么都没有出现并且您的样式不起作用的原因是因为您实际上并未绘制所有小部件。

您永远不会告诉以下小部件实际在您的窗口上绘图:

  • n
  • f1
  • f2

此外,当您调用ttk.Style() 时,您还没有创建根窗口时会加载第二个窗口。这比我能解释的要好得多here

通过将程序更改为以下内容,您可以看到样式确实有效:

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()

虽然这是主观的,但实现了相同的目标。

【讨论】:

  • 感谢您的回复,我知道 :) 我现在也得到它,而不是从某个地方复制它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
相关资源
最近更新 更多