带有Tkinter的类中的entry.get()问题

时间:2014-07-21 12:51:12

标签: python-2.7 tkinter

我正在开发一个GUI,我想将它链接到我的程序,但是我在get()方面遇到了很多问题。

from Tkinter import *
class ProgramGui(Tk):

        gui = Tk()

        gui.grid()     

#Create Text  

        t = Label(gui,text='Enter your text : ')

        t.grid(column=1,row=1,sticky='EW')

#Create an entry

        e = Entry(gui)

        e.grid(column=2,row=1,sticky='EW')

        e.focus_set()

        def valueGET():

                print e.get()   

#Create button

        b=Button(gui, text="get", width=10, command=valueGET)

        b.grid(column=3,row=1,sticky='EW')

        mainloop()

如果我没有创建一个类,这个代码函数,但我想用这个gui作为我的程序,所以我需要把它放在一个类中来调用它。

我在尝试我的程序时遇到此错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Anaconda\lib\lib-tk\Tkinter.py", line 1486, in __call__
    return self.func(*args)
  File "C:/Users/me/Desktop/my1rstGUI.py", line 24, in valueGET
    print e.get()
  File "C:\Anaconda\lib\lib-tk\Tkinter.py", line 2472, in get
    return self.tk.call(self._w, 'get')
TclError: invalid command name ".315386248L"
Exception in Tkinter callback

1 个答案:

答案 0 :(得分:1)

首先,您需要将大部分代码移到类的构造函数中:

class ProgramGui(Tk):
    def __init__(self):
        gui = Tk() 
        ....

其次,您需要保存对要与之交互的小部件的引用:

self.e = Entry(gui)
...
self.e.get(...)

完全与您的问题无关,gui.grid()绝对没有任何意义。你可以删除它。