点击button时候传递一个参数实现局部刷星_Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题...

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

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

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

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

新朋友第一次见面是不是非常开心。希望通过木辛老师的Tkinter编程课堂,可以让大家和Tkinter成为非常好的朋友。

这节课咱们再来进一步认识一下Tkinter。

上一个例子还是太简单了,我们不禁在想,能不能做得好玩一点,通过某些动作,修改一下窗口上显示的内容?

答案是肯定的,通过Tkinter非常简单就可以实现这个功能。

9bb44f6295157c620938afd44368cd32.png

好!上代码。

import tkinter as tkclass 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!  (Closing in 2 seconds)"        self.after(2000, self.destroy)if __name__ == "__main__":    window = Window()    window.mainloop()

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

784e89841ac56776f05128fb371231a3.png

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

e67c74a356e638f3c74e15917339114f.png

咱们来看下代码

def say_hello(self):        self.label_text = "welcome"

上节课,木辛老师讲过,将变量和Label控件关联起来,如果变量的内容会反映到控件上。

为什么在这里更改文本不起作用呢?而点击good_bye_button却可以执行关闭窗口的操作。

def say_goodbye(self):        self.label_text = "Goodbye!  (Closing in 2 seconds)"        self.after(2000, self.destroy)

通过分析,可以看出来,其实代码逻辑是执行了,但是”跳过了“设置文本这一行。

这貌似不太正常!

fd9b31def96b760c23791233a2bda129.png

其实呀,这里代码编写的有一点点不对。

哪里的问题呢?

之所以变量的值没有更新,是因为在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 tkclass 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!  (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。

好了,今天的知识点,大家掌握了吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值