微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python - _tkinter.TclError:ttk.Frame

如何解决python - _tkinter.TclError:ttk.Frame

我想在我的 GUI 中用 2 个选项卡制作带有颜色的背景,但我遇到了这个问题,也许有一些建议?

代码如下:

colors = ["Blue","Gold","Red"]

def radCall():
    radSel=radVar.get()
    if radSel == 0: tab1.configure(bg=colors[0])
    elif radSel == 1: tab1.configure(bg=colors[1])
    elif radSel == 2: tab1.configure(bg=colors[2])

radVar = tk.Intvar()
radVar.set(99)

for col in range(3):
    curRad = tk.Radiobutton(mighty,text=colors[col],variable=radVar,value=col,command=radCall)
    curRad.grid(column=col,row=13,sticky=tk.W)

问题来了:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\HP\AppData\Local\Programs\Python\python39\lib\tkinter\__init__.py",line 1892,in __call__                           >C:/Users/HP/
    return self.func(*args)                                        top/Kuliah/Se
  File "c:\Users\HP\Desktop\Kuliah\Semester 2\information TechnologI_jualbeli_Day\Python\week5\Informasi Jual Beli\GUI_jualbeli_Dazan.py",line 277,in radCall
if radSel == 0: tab1.configure(bg=colors[0])
  File "C:\Users\HP\AppData\Local\Programs\Python\python39\lib\tkinter\__init__.py",line 1646,in configure
return self._configure('configure',cnf,kw)
  File "C:\Users\HP\AppData\Local\Programs\Python\python39\lib\tkinter\__init__.py",line 1636,in _configure
    self.tk.call(_flatten((self._w,cmd)) + self._options(cnf))    
_tkinter.TclError: unkNown option "-bg"

有什么想法吗?

解决方法

要玩转 ttk 小部件的主题,您应该使用 Style,如下所示:

s = ttk.Style()
s.configure('first.TFrame',background='red')
s.configure('second.TFrame',background='green')
s.configure('third.TFrame',background='blue')

那么你的 if 语句将是:

def radCall():
    radSel=radVar.get()
    if radSel == 0: tab1.configure(style='first.TFrame')
    elif radSel == 1: tab1.configure(style='second.TFrame')
    elif radSel == 2: tab1.configure(style='third.TFrame')

此外,在您的情况下,您必须定义 colors 在顶部,然后使用 colors[0] 等,与 configure() 一起使用。

您也可以尝试仅创建一个主题并继续编辑它:

s = ttk.Style()
.... # Rest of code

def radCall():
    radSel=radVar.get()
    if radSel == 0:
        s.configure('custom.TFrame',background=colors[0])
        tab1.configure(style='custom.TFrame')
    elif radSel == 1:
        s.configure('custom.TFrame',background=colors[1])
        tab1.configure(style='custom.TFrame')
    elif radSel == 2:
        s.configure('cusom.TFrame',background=colors[2])
        tab1.configure(style='custom.TFrame')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。