大家好,欢迎来到IT知识分享网。
如何控制变量在Tkinter中的使用?这节课木辛老师来给大家说道说道。
请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Python编程知识,变身快乐的编程达人吧~
大家好,木辛老师又来了!
上节课咱们初次见到Tkinter制作的窗口,并且增加了简单的事件交互。
新朋友第一次见面是不是非常开心。希望通过木辛老师的Tkinter编程课堂,可以让大家和Tkinter成为非常好的朋友。
这节课咱们再来进一步认识一下Tkinter。
上一个例子还是太简单了,我们不禁在想,能不能做得好玩一点,通过某些动作,修改一下窗口上显示的内容?
答案是肯定的,通过Tkinter非常简单就可以实现这个功能。
好!上代码。
import tkinter as tk class Window(tk.Tk): def __init__(self): super().__init__() self.title("Hello") self.label_text = "choose" self.label = tk.Label(self, text=self.label_text) self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30) hello_button = tk.Button(self, text="Say Hello", command=self.say_hello) hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20)) goodbye_button = tk.Button(self, text="Say GoodBye", command=self.say_goodbye) goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20)) def say_hello(self): self.label_text = "welcome" def say_goodbye(self): self.label_text = "Goodbye! \n (Closing in 2 seconds)" self.after(2000, self.destroy) if __name__ == "__main__": window = Window() window.mainloop()
执行程序,效果图就像这样
然后,我狂点say按钮,发现并没有什么反应。这是为什么呢?明明已经设置内容了呀?
咱们来看下代码
def say_hello(self): self.label_text = "welcome"
上节课,木辛老师讲过,将变量和Label控件关联起来,如果变量的内容会反映到控件上。
为什么在这里更改文本不起作用呢?而点击good_bye_button却可以执行关闭窗口的操作。
def say_goodbye(self): self.label_text = "Goodbye! \n (Closing in 2 seconds)" self.after(2000, self.destroy)
通过分析,可以看出来,其实代码逻辑是执行了,但是”跳过了“设置文本这一行。
这貌似不太正常!
其实呀,这里代码编写的有一点点不对。
哪里的问题呢?
之所以变量的值没有更新,是因为在Tkinter中,更新变量的值,我们需要使用Tkinter自己”认可“的方式。
需要按照Tkinter自己的格式定义。
比如:
- (1)使用字符串类型,需要使用StringVar类型定义:label_text = tk.StringVar()
- (2)整型则需要使用 label_text = tk.IntVar()
- (3)双精度则使用label_text = tk.DoubleVar()
- (4)布尔型则对应的label_text = tk.BooleanVar()
既然知道了这个原因,咱们再修改程序之前,先来测试一下:
(这个时候应该打开IDLE了!)
>>> from tkinter import * >>> win = Tk() >>> sv = StringVar() >>> sv.get() '' >>> sv.set("你好,神秘的TKinter!") >>> sv.get() '你好,神秘的TKinter!' >>> sv.set("%s --- 快乐编程,快乐成长!" % sv.get()) >>> sv.get() '你好,神秘的TKinter! --- 快乐编程,快乐成长!' >>>
看来,通过这种方式是可以实现更新Tkinter中变量的目的的!
让我们修改一下最初的程序
import tkinter as tk class Window(tk.Tk): def __init__(self): super().__init__() self.title("Hello") self.label_text = tk.StringVar() self.label_text.set('choose') self.label = tk.Label(self, textvariable=self.label_text) self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30) hello_button = tk.Button(self, text="Say Hello", command=self.say_hello) hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20)) goodbye_button = tk.Button(self, text="Say GoodBye", command=self.say_goodbye) goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20)) def say_hello(self): self.label_text.set('welcome') def say_goodbye(self): self.label_text.set('Goodbye! \n (Closing in 2 seconds)') self.after(2000, self.destroy) if __name__ == "__main__": window = Window() window.mainloop()
通过在初始化方法__init__()中定义,并给到一个初始化值
self.label_text = tk.StringVar() self.label_text.set('choose')
然后在按钮点击函数中,分别赋予新的值,这个时候就可以看到对应的label显示的文本发生了变化。
搞定!
在这个代码里,大家需要注意一点。我们在设置变量和控件绑定的时候,使用的是textvariable=self.label_text这个参数,而不是之前的text。
好了,今天的知识点,大家掌握了吗?
咱们下节课再继续学习Tkinter的知识吧。
快乐编程,快乐成长!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/53914.html