Python 2.7 - 来自其他文件

时间:2017-01-10 07:31:21

标签: python tkinter

我正在尝试从其他文件更新tkinter条目,但它无法正常工作。 例如,我有两个文件,其中一个是GUI.py,第二个是lib.py. 我尝试从lib.py更新GUI.py中的条目,我收到以下错误:

  

“yourName.delete(0,END)

     

NameError:全局名称'yourName'未定义“

我的代码如下:

文件1 - GUI.py

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()

文件2 - lib.py

def beenClicked():

    yourName.delete(0, END)

    yourName.insert(0, "Eran Z")

谢谢,伊兰

1 个答案:

答案 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