我正在学习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
感谢您的帮助。
答案 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()
这是一个可行的代码示例。