Python& TkInter - 如何在Entry Field中从用户获取值,然后在终端上打印

时间:2016-05-13 21:12:05

标签: python-3.x tkinter

我正在学习Python& Tkinter并遵循教程。我正在制作一个程序来完成我以前在脚本语言(如Powershell)中所做的事情,获取用户价值,然后对它做一些事情,作为入门者。

我无法找到任何看起来像我的代码。所以我请求你的帮助。

基本上,这个程序创建一个带有退出按钮的框架,一个用户输入值的条目小部件,&一个OK按钮。然后,他按下OK按钮,该值应该在python终端中打印。

我收到错误但我不明白为什么。我正在按照教程进行操作,因此我按照他们展示的方式进行操作,通过定义一个类来创建框架,按下按钮&里面的文字框。

从条目小部件获取用户输入文本的功能设置如下,我将放置其他功能,如果我们说,我想添加按钮功能来进行打印。如果之前设置了要打印的值,我设法使打印工作,但我无法从Entry Widget获取值。

from tkinter import *

class Window:
def __init__(self, master):
    self.master = master
    master.title("Get a value and print it")
    self.info = Label(master, text="Please write something then click ENTER")
    self.info.pack()

    self.ebox= Entry()
    self.ebox.pack()

    self.viewnumber = Button(master, text="OK", activebackground="red", command=get_int)
    self.viewnumber.pack()

    self.quit = Button(master, text="Quit", activebackground="blue", command=quit)
    self.quit.pack()

def get_int():
    intnum = ebox.get
    print(intnum)

def quit():
    root.quit()

root = Tk()
root.geometry("400x400")
my_gui = Window(root)
root.mainloop()

我收到此错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python35-32\lib\tkint
er\__init__.py", line 1549, in __call__
    return self.func(*args)
  File "C:\Users\USERNAME\Desktop\pyth222184.py", line 20, in get_int
    intnum = ebox.get
NameError: name 'ebox' is not defined

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

实际上问题是无法从该功能访问ebox。您需要使用self.ebox,以便它实际引用实例变量ebox。 要了解有关详情,请访问here

此外,您使用self.ebox.get代替self.ebox.get()self.ebox.get本身会返回self.entry.get的原始函数对象。要实际调用该函数并获取内容,请使用self.ebox.get()

但为了实现这一点,必须定义self。为此,请将self添加为每个方法中的第一个参数。当您致电instance.method()时,Python会自动将instance传递为self。从本质上讲,self允许您访问当前实例。

答案 1 :(得分:0)

那是对的。 Class中的get_int是一个方法,你不能像函数一样调用它。你必须像对待这样的方法那样称呼它

elf.viewnumber = Button(master, text="OK",bg="red",command=lambda:my_gui.get_int() )
self.viewnumber.pack()

这是一个可行的代码示例。