我正在尝试从其他文件更新tkinter条目,但它无法正常工作。 例如,我有两个文件,其中一个是GUI.py,第二个是lib.py. 我尝试从lib.py更新GUI.py中的条目,我收到以下错误:
“yourName.delete(0,END)
NameError:全局名称'yourName'未定义“
我的代码如下:
from Tkinter import *
app = Tk()
app.title("GUI Example")
app.geometry('200x100+200+200')
tv = StringVar(None)
yourName = Entry(app, textvariable=tv)
yourName.pack()
button1 = Button(app, text="click here", command=beenClicked).pack(side="bottom",padx=15,pady=15)
app.mainloop()
def beenClicked():
yourName.delete(0, END)
yourName.insert(0, "Eran Z")
谢谢,伊兰
答案 0 :(得分:0)
你的问题是GUI.py使用来自lib.py的东西,反之亦然,因此更简单的解决方案是将所有内容放在同一个文件中。但你显然想保留这两个文件,否则你不会问这个问题。
为了使其正常工作,lib.py模块不应该依赖于主文件GUI.py中定义的任何对象:
<强> lib.py 强>
def beenClicked(entry):
entry.delete(0, "end")
entry.insert(0, "Eran Z")
<强> GUI.py 强>
from Tkinter import *
from lib import beenClicked
app = Tk()
app.title("GUI Example")
app.geometry('200x100+200+200')
tv = StringVar(None)
yourName = Entry(app, textvariable=tv)
yourName.pack()
button1 = Button(app, text="click here", command=lambda: beenClicked(yourName)).pack(side="bottom",padx=15,pady=15)
app.mainloop()
因此函数beenClicked
作用于作为参数给出的条目,而不是作用于GUI.py中创建的条目,因此不存在条目存在的问题。
但这意味着我需要使用lamdba函数将参数中的yourName
传递给按钮命令中的beenClicked
。