tkinter ttk 样式布局未找到

Che*_*tpp 2 tkinter ttk python-3.x

以下代码出错。继续查看示例并重新评估代码,但无法真正发现任何不应该运行的原因。是否有任何错误'mRRed'导致无法找到布局?(我确定后续)...

import tkinter as tk
from tkinter import ttk

class MainFrame:
    def __init__(self,parent):
        self.frame = ttk.Frame(parent,padding='3 3 12 12')
        self.frame.grid(column=0, row=0)

        self.mRRed = ttk.Style()
        self.mRBlue = ttk.Style()
        self.mPurple = ttk.Style()
        self.mPink = ttk.Style()
        self.mSCyan = ttk.Style()
        self.mVYellow = ttk.Style()
        self.mGreen  = ttk.Style()

        self.mRRed.configure("mRRed",background="#E61E50")
        self.mRBlue.configure("mRBlue",background="#0F69AF")
        self.mPurple.configure("mPurple",background="#503291")
        self.mPink.configure("mPink",background="#EB3C96")
        self.mSCyan.configure("mSCyan",background="#2BDECD")
        self.mVYellow.configure("mVYellow",background="#FFC832")
        self.mGreen.configure("mGreen",background="#149B5F")


        self.toolRibbon    = ttk.Frame(self.frame, style='mRRed')
        self.subtoolRibbon = ttk.Frame(self.frame, style='mRBlue')
        self.titleFrame    = ttk.Frame(self.frame, style='mPruple')
        self.contentFrame  = ttk.Frame(self.frame, style='mPink')
        self.optionRibbon  = ttk.Frame(self.frame, style='mSCyan')
        self.statusFrame   = ttk.Frame(self.frame, style='mVYellow')
        self.infoFrame     = ttk.Frame(self.frame, style='mGreen')

        self.toolRibbon.grid(column=0,row=0)
        self.subtoolRibbon.grid(column=0,row=1)
        self.titleFrame.grid(column=1,row=1)
        self.contentFrame.grid(column=1,row=2)
        self.optionRibbon.grid(column=1,row=3)
        self.statusFrame.grid(column=1,row=4)
        self.infoFrame.grid(column=4,row=1)

root = tk.Tk()
root.title("test")

main = MainFrame(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

-------------------------------------------------- ------------------------- TclError Traceback (最近一次调用最后一次) in 43 root.title("test") 44 ---> 45 main = MainFrame(root) 46 root.mainloop()

init (self, parent) 24 25 ---> 26 self.toolRibbon = ttk.Frame(self.frame, style='mRRed') 27 self.subtoolRibbon = ttk.Frame(self.frame, style='mRBlue' ) 28 self.titleFrame = ttk.Frame(self.frame, style='mPruple')

d:\程序\阿纳康达\ lib中\ Tkinter的\ ttk.py在初始化。(自走,主,**千瓦)740边框宽度,浮雕,填充,宽度,高度741 “”” - >窗口小部件742初始化(自走,主, "ttk::frame", kw) 743 744

D:\Programs\Anaconda\lib\tkinter\ttk.py in init (self, master, widgetname, kw) 557 # 现在加载 tile,如果需要 558 _load_tile(master) --> 559 tkinter.Widget。init (self, master, widgetname, kw=kw) 560 561

D:\Programs\Anaconda\lib\tkinter__init__.py in init (self, master, widgetName, cnf, kw, extra) 2297 del cnf[k] 2298
self.tk.call( -> 2299 (widgetName, self._w) + extra + self._options(cnf)) 2300 for k, v in classes: 2301
k.configure(self, v)

TclError:未找到布局 mRRed

Axe*_*319 5

ttk.Style()遵循T<widget name>用户创建样式的命名约定。tkinter除了他们在示例中使用命名约定但从未解释过这一事实之外,这实际上并不是真正在 python文档中。

简而言之,如果要将样式应用于Frame小部件,则需要.TFrame在样式名称中使用后缀。

我还注意到,我误读了您的问题,并以为您使用的是 aLabel而不是Frame.

我添加了一些Labels 来演示效果,但在您的示例中,您的代码将是:

import tkinter as tk
from tkinter import ttk

class MainFrame:
    def __init__(self,parent):
        self.frame = ttk.Frame(parent,padding='3 3 12 12')
        self.frame.grid(column=0, row=0)

        self.mRRed = ttk.Style()
        self.mRBlue = ttk.Style()
        self.mPurple = ttk.Style()
        self.mPink = ttk.Style()
        self.mSCyan = ttk.Style()
        self.mVYellow = ttk.Style()
        self.mGreen  = ttk.Style()

        self.mRRed.configure("mRRed.TFrame",background="#E61E50")
        self.mRBlue.configure("mRBlue.TFrame",background="#0F69AF")
        self.mPurple.configure("mPurple.TFrame",background="#503291")
        self.mPink.configure("mPink.TFrame",background="#EB3C96")
        self.mSCyan.configure("mSCyan.TFrame",background="#2BDECD")
        self.mVYellow.configure("mVYellow.TFrame",background="#FFC832")
        self.mGreen.configure("mGreen.TFrame",background="#149B5F")


        self.toolRibbon    = ttk.Frame(self.frame, style='mRRed.TFrame',borderwidth=4)
        self.subtoolRibbon = ttk.Frame(self.frame, style='mRBlue.TFrame',borderwidth=4)
        self.titleFrame    = ttk.Frame(self.frame, style='mPurple.TFrame',borderwidth=4)
        self.contentFrame  = ttk.Frame(self.frame, style='mPink.TFrame',borderwidth=4)
        self.optionRibbon  = ttk.Frame(self.frame, style='mSCyan.TFrame',borderwidth=4)
        self.statusFrame   = ttk.Frame(self.frame, style='mVYellow.TFrame',borderwidth=4)
        self.infoFrame     = ttk.Frame(self.frame, style='mGreen.TFrame',borderwidth=4)

        self.toolRibbon.grid(column=0,row=0)
        self.subtoolRibbon.grid(column=0,row=1)
        self.titleFrame.grid(column=1,row=1)
        self.contentFrame.grid(column=1,row=2)
        self.optionRibbon.grid(column=1,row=3)
        self.statusFrame.grid(column=1,row=4)
        self.infoFrame.grid(column=4,row=1)

        self.test = ttk.Label(self.optionRibbon, text='cyan test')
        self.test.pack()

        self.test2 = ttk.Label(self.contentFrame, text='pink test')
        self.test2.pack()

root = tk.Tk()
root.title("test")

main = MainFrame(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

  • 谢啦!是的,我确实很难找到一些 tk 内容的良好文档,但找到了一个很好的教程,并且实际上在我的项目中取得了坚实的进展!谢谢。 (2认同)