【问题标题】:Python 2.7 - tkinter update from other filePython 2.7 - 从其他文件更新 tkinter
【发布时间】:2018-12-18 20:18:06
【问题描述】:

我正在尝试从其他文件更新 tkinter 条目,但它不起作用。 例如我有两个文件,其中一个是 GUI.py,第二个是 lib.py。 我尝试从 lib.py 更新 GUI.py 中的条目,但出现以下错误:

"你的名字.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")

谢谢,伊兰

【问题讨论】:

  • 如何将一个文件导入另一个文件?
  • 使用 import lib 命令

标签: python tkinter


【解决方案1】:

您的问题是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多