Tkinter按钮找不到回调命令

2024-09-30 18:19:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个程序,可以读取和解析一个嵌入式硬件系统的配置文件。我正在尝试使用tkinter和python来创建一个简单的GUI来读写这个文件。我有文件IO和解析大部分工作,但我有麻烦,使所有部分与GUI集成。我想从设备上读取信息,然后用相关信息填充输入字段。我遇到的问题是我不断地犯错误

"in initUI
opnBut = Button(butFrm, text="Open", command=openCfg)
NameError: name 'openCfg' is not defined"

如果我把它放在应用程序类之外,我可以让它找到函数,但是我不知道如何引用窗口中的字段来更新它们。你知道吗

任何帮助都将不胜感激。我的代码段包含在下面。你知道吗

class Application(Frame):
    def openCfg():
    name = getNameFromFile()
    nameEntry.insert(0, name)



    def __init__(self, parent):
        Frame.__init__(self, parent)

        self.parent = parent
        self.initUI()


    def initUI(self):
        self.parent.title("Config Reader")
        self.pack(fill=BOTH, expand=True)

        nameFrm = Frame(self)
        nameFrm.pack(fill=X)

        nameLbl = Label(nameFrm, text="Device Name",width=20)
        nameLbl.pack(side=LEFT,padx=5, pady=5)
        nameEntry = Entry(nameFrm)
        nameEntry.pack(fill=X, padx=5, pady=5)

        butFrm = Frame(self)
        butFrm.pack(fill=X)
        opnBut = Button(butFrm, text="Open Cfg", command=openCfg)
        opnBut.pack(fill=X, padx=5,pady=5)

root = Tk()
root.geometry("600x600")

app = Application(root)
app.mainloop()

Tags: textnameselfdeffillframepackparent
1条回答
网友
1楼 · 发布于 2024-09-30 18:19:07

在类命名空间中定义的项被绑定到类。在这种情况下,你有几个选择。。。你知道吗

一种选择是,您可以将其设置为staticmethod

class Application(Frame):
    @staticmethod
    def openCfg():
        name = getNameFromFile()
        nameEntry.insert(0, name)

然后将按钮绑定为:

opnBut = Button(butFrm, text="Open Cfg", command=self.openCfg)

然而,静态方法很少是必要的。在本例中,我可能只是将openCfg的定义移出类,并保持其他所有内容不变:

def openCfg():
    name = getNameFromFile()
    nameEntry.insert(0, name)

class Application(Frame):
    ...

再看一眼,这可能仍然会为nameEntry带来一个NameError。您可能需要一个一流的方法:

class Application(Frame):
    def openCfg(self):
        name = getNameFromFile()
        self.nameEntry.insert(0, name)

当然,当您创建nameEntry时,您需要使它成为应用程序类的成员。你知道吗

...
self.nameEntry = Entry(nameFrm)
self.nameEntry.pack(fill=X, padx=5, pady=5)
...

相关问题 更多 >