点击button时候传递一个参数实现局部刷星_Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题...
如何控制變量在Tkinter中的使用?這節課木辛老師來給大家說道說道。
請點擊右上角“關注”按鈕關注我們喲:跟著木辛老師學習Python編程知識,變身快樂的編程達人吧~
大家好,木辛老師又來了!
上節課咱們初次見到Tkinter制作的窗口,并且增加了簡單的事件交互。
新朋友第一次見面是不是非常開心。希望通過木辛老師的Tkinter編程課堂,可以讓大家和Tkinter成為非常好的朋友。
這節課咱們再來進一步認識一下Tkinter。
上一個例子還是太簡單了,我們不禁在想,能不能做得好玩一點,通過某些動作,修改一下窗口上顯示的內容?
答案是肯定的,通過Tkinter非常簡單就可以實現這個功能。
好!上代碼。
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()執行程序,效果圖就像這樣
然后,我狂點say按鈕,發現并沒有什么反應。這是為什么呢?明明已經設置內容了呀?
咱們來看下代碼
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)通過分析,可以看出來,其實代碼邏輯是執行了,但是”跳過了“設置文本這一行。
這貌似不太正常!
其實呀,這里代碼編寫的有一點點不對。
哪里的問題呢?
之所以變量的值沒有更新,是因為在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。
好了,今天的知識點,大家掌握了嗎?
總結
以上是生活随笔為你收集整理的点击button时候传递一个参数实现局部刷星_Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python截取后三位元素_python
- 下一篇: python atm作业详解_pytho