【问题标题】:tkinter TclError: unknown option on widget attributestkinter TclError:小部件属性上的未知选项
【发布时间】:2020-03-30 10:23:08
【问题描述】:

这是我在 Tkinter 上的第一个应用程序,我正在尝试从下拉菜单中的选定文件按钮中获取输入,并触发单击提交按钮时要执行的功能。这个目标已经实现,但按要求设计按钮和标签失败了。

root = tk.Tk()
root.geometry('1200x800')
root.title("Update System")

label_0 = Label(root, text="Update System",width=25,font=("bold", 25),height=2,bg='brown',fg='white')
label_0.place(x=170,y=30)

root.mainloop()

我收到错误TclError: unknown option "-fg" (for bg-background, height attributes of buttons and labels). 完整的回溯如下所示:

---------------------------------------------------------------------------
TclError                                  Traceback (most recent call last)
<ipython-input-15-2c166bb79a75> in <module>
      3 root.title("Update System")
      4 
----> 5 label_0 = Label(root, text="Update System",width=25,font=("bold", 25),height=2,bg='brown',fg='white')
      6 label_0.place(x=170,y=30)
      7 

~\Anaconda3\lib\tkinter\ttk.py in __init__(self, master, **kw)
    759             relief, text, wraplength
    760         """
--> 761         Widget.__init__(self, master, "ttk::label", kw)
    762 
    763 

~\Anaconda3\lib\tkinter\ttk.py in __init__(self, master, widgetname, kw)
    557             # Load tile now, if needed
    558             _load_tile(master)
--> 559         tkinter.Widget.__init__(self, master, widgetname, kw=kw)
    560 
    561 

~\Anaconda3\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: unknown option "-height"

如果有人能帮助我理解和解决这个问题,那就太好了。提前致谢!

【问题讨论】:

  • 你的代码有from tkinter.ttk import *吗?如果是,那么您使用的是不支持heightfgbg 选项的ttk.Label。尝试将Label 更改为tk.Label
  • 是的,我的代码有 ttk,我已经更正了,现在可以使用了。谢谢

标签: python-3.x tkinter tcl


【解决方案1】:

在 Tk 和 tkinter 中有 两个 Label 小部件。较旧的标准 Tk 标签支持直接设置前景色和背景色等内容,而较新的 Ttk(“Themed Tk”)不支持(而是支持主题化,特别是它支持非常紧密地遵循 OS 原生主题)。它们都被保留了,因为新的绝对不是旧的替代品,而且一些应用程序(可能包括你的)需要旧的确切功能。

如果我们查看您的回溯,我们会看到:

~\Anaconda3\lib\tkinter\ttk.py in __init__(self, master, **kw)
    759             relief, text, wraplength
    760         """
--> 761         Widget.__init__(self, master, "ttk::label", kw)
    762 
    763 

看到那里的ttk(两次!)?这表明您正在使用 Ttk 标签。为了解决您当前的问题,明确使用旧的。

# Note: tk.Label and not just Label or ttk.Label
label_0 = tk.Label(root, text="Update System", 
                   width=25, font=("bold", 25), height=2, bg='brown', fg='white')

另一种选择是创建一种新样式,您可以将其应用于该小部件,以使其以您想要的方式脱颖而出……但对于一个简单的一次性标签来说,这需要更多的工作。

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 2022-07-08
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多