[英]tkinter script to print entry text
我刚刚开始学习如何将tkinter与python结合使用,并且这种直觉尝试尝试使用简单的脚本来打印输入到输入框中的内容似乎是不合常理的:
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
text_write = Entry(frame)
text_write.pack()
self.button = Button(frame, text="quit", fg="red", command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text='hello', fg='black', command=self.say_hi(text_write.get()))
self.hi_there.pack(side=RIGHT)
def say_hi(self, text):
print(text)
root = Tk()
app = App(root)
root.mainloop()
这不会执行任何操作,也不会输出任何错误,但是如果我将其更改为:
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.text_write = Entry(frame)
self.text_write.pack()
self.button = Button(frame, text="quit", fg="red", command=frame.quit)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text='hello', fg='black', command=self.say_hi)
self.hi_there.pack(side=RIGHT)
def say_hi(self):
print(self.text_write.get())
然后它将调用该函数并打印该值。 为什么需要在此处声明“自我”? 又为什么不能将text_write的值作为参数传递给say_hi(如第一个示例中所示)并显示呢? 还是您和我做错了吗?
执行此操作时:
self.button = Button(..., command=func())
然后python将调用func()
,并将其结果分配给command属性。 由于您的函数不返回任何内容,因此命令为None。 这就是为什么当您按下按钮时什么也没发生。
您的第二个版本看起来不错。 需要self
的原因是,没有self
, text_write
是仅对init函数可见的局部变量。 通过使用self
,它成为对象的属性,因此可以被对象的所有方法访问。
如果您想学习如何传递类似于第一次尝试的参数,请在此站点上搜索lambda
和functools.partial
用法。 此类问题已被询问并回答了几次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.