我对此代码有疑问:
from tkinter import *
class app:
def create(arrSettings):
proot = Toplevel()
proot.title("Settings")
m = Frame(proot).pack() #Some Frames so I can arrange them how I'd like to
mcan = Canvas(proot)
mcan.pack(fill="both", side="left")
x = Frame(proot).pack()
xcan = Canvas(proot)
xcan.pack(fill="both", expand="yes", side="left")
win_0 = Frame(xcan)
lbl_0 = Label(win_0, text="Option0").pack()
txt_0 = Text(win_0).pack()
win_0.pack()
win_1 = Frame(xcan)
lbl_1 = Label(win_1, text="Option1").pack()
txt_1 = Text(win_1).pack()
win_1.pack()
btn_menu0 = Button(mcan, text="Menu0", command=app.func_btn_menu0).pack()
btn_menu1 = Button(mcan, text="Menu1", command=app.func_btn_menu1).pack()
def func_btn_menu0():
lbl_0.config(text="foo") # <-- Problem
txt_0.insert("end", "bar") # <-- Problem
def func_btn_menu1():
pass
(我将设计代码(bg,border,...)留下了)
这是另一个由主要窗口启动的窗口。 它会在左侧显示一些按钮,在右侧显示一些标签和文本框。
每当按下左侧的按钮时,应更改标签文本。
问题在于:当我按下按钮时,我收到此错误并且文本无法更改:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
return self.func(*args)
File "/[...]/program.py", line 27, in colormain
lbl_0.config(text="Background")
NameError: name 'lbl_0' is not defined
我真的不明白为什么这会给我一个错误,所以我想问你。
此代码从主窗口启动,代码为:
program.app.create(arrSettings) #arrSettings is an array in which some colors for the design are
提前致谢。
答案 0 :(得分:1)
不要声明和打包在同一行
返回此代码片段为无
Label(win_0, text="Option0").pack()
然而,这会返回Label类的对象
Label(win_0, text="Option0")
所以使用: -
lbl_0 = Label(win_0, text="Option0")
lbl_0.pack()
而不是
lbl_0 = Label(win_0, text="Option0").pack()
还使用self对象作为函数的参数。无论您在何处使用变量,都要检查变量是否在范围内。 这应该可以帮助您解决此错误......