2015-12-30 422 views
-1
class FCMenu: 
def __init__(self,master): 
    frame=Frame(master) 
    frame.pack() 
    Label(frame, text="What is the number?").grid(row=0) 
    self.num = IntVar() 
    self.entry = Entry(frame,textvariable=self.num).grid(row=1) 
    button = Button(frame, text="Factorize", command=self.calc).grid(row=2) 
    self.resultvar = StringVar() 
    Label(frame, textvariable=self.resultvar).grid(row=3) 

def calc(self): 
    e = int(self.entry.get()) 
    print(e,self.num.get()) 
    ... 

我想用tkinter创建一个Python GUI,如上所示。但是,每次我在条目或文本变量上调用.get()时,都会失败。通过条目本身,它解释了NoneType没有.get()函数。如果我删除它并仅使用self.num.get(),则它将打印0或0.0,具体取决于是否将其转换为整数。如果我将self.num设置为StringVar,则不会打印任何内容。简而言之,我无法找到获取我想要检索的输入的方法。Tkinter - Entry .get()函数

回答

0

制作了代码的简化版本,并且在Entry小部件发生更改时正确打印。你的代码中的其他地方可能会出错?或错误的缩进?下面是我测试(这是2.7的代码,但有3.5版本的代码也工作)的代码:它来自self.num.get()self.entry.get()打印

import Tkinter as tk 

class FCMenu: 
    def __init__(self, master): 
     frame = tk.Frame(master) 

     self.num = tk.IntVar() 
     self.entry = tk.Entry(frame, textvariable=self.num) 
     self.button = tk.Button(frame, text='Calc', command=self.calc) 

     frame.pack() 
     self.entry.pack() 
     self.button.pack() 

    def calc(self): 
     print(self.num.get(), self.entry.get()) 

root = tk.Tk() 
frame = FCMenu(root) 
root.mainloop() 

。第一个是Int,第二个是String

+0

非常感谢!看起来网格是问题,因为你的.pack()解决方案完美工作。 – StardustGogeta

+0

很好,你得到它的工作。我认为混合包和网格可能会导致问题,现在你提到它。就我个人而言,我只使用Grid作为我制作的GUI,从未尝试过将它们混合。我只用于快速测试。 –