获取NameError尝试访问我的按钮命令功能中的tkinter小部件

时间:2018-10-19 18:29:38

标签: python tkinter

我为tkinter GUI编写了一个类,由于某种原因,我无法访问在按钮的回调函数中创建的Entry小部件:

import tkinter as tk

class MyGUI:
    def __init__(self, master):
        entry = tk.Entry(master)
        entry.pack()

        self.run = tk.Button(master, text="Run", command=self.run)
        self.run.pack()

    def run(self):
        print('Entry content is:', entry.get())

root = tk.Tk()
my_gui = MyGUI(root)
root.mainloop()

代码抛出NameError: name 'entry' is not defined。我在做什么错了?

1 个答案:

答案 0 :(得分:3)

您忘记在entry中将self设置为属性,也没有从self访问它。此外,您定义了一个self.run和一个def run(..)方法,这将导致 instance 的方法被覆盖。因此,您应该将其重命名为其他名称,例如_run

import tkinter as tk

class MyGUI:
    def __init__(self, master):
        self.entry = tk.Entry(master)
        self.entry.pack()

        self._run = tk.Button(master, text="Run", command=self.run)
        self._run.pack()

    def run(self):
        print('Entry content is:', self.entry.get())

root = tk.Tk()
my_gui = MyGUI(root)
root.mainloop()