Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题

Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题self.label_text.set然后在按钮点击函数中,分别赋予新的值,这个时候就可以看到对应的label显示的文本发生了变化。

大家好,欢迎来到IT知识分享网。

如何控制变量在Tkinter中的使用?这节课木辛老师来给大家说道说道。

请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Python编程知识,变身快乐的编程达人吧~

大家好,木辛老师又来了!

上节课咱们初次见到Tkinter制作的窗口,并且增加了简单的事件交互。

新朋友第一次见面是不是非常开心。希望通过木辛老师的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() 

执行程序,效果图就像这样

Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题

然后,我狂点say按钮,发现并没有什么反应。这是为什么呢?明明已经设置内容了呀?

Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题

咱们来看下代码

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自己”认可“的方式。

需要按照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

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信