使用Tkinter只需要幾行代碼就可快速實現用戶交互效果,試試?

我叫你,你敢答應嗎?

如何通過Tkinter從用戶那裡“套取”信息,木辛老師有一招。


請點擊右上角“關注”按鈕關注我們喲:跟著木辛老師學習Python Tkinter編程知識,變身快樂的編程達人吧~


有的時候,你可能需要詢問用戶一些事情,比如說

“你吃(飯)了嗎?”

哦!好吧,其實這是在國內幾乎很多地方的傳統,也是很多時候熟人見面,不得不“寒暄”的託詞。


在Tkinter中,如果你想發起這麼“無聊”的問候,也不是沒有辦法。

Tkinter提供了這麼幾種方式,結合上節課講到的message box,實現問候用戶的目的:

  • askquestion
  • askyesno
  • askokcancel
  • askretrycancel


看完是不是一臉懵懵噠呢!


木辛老師剛開始接觸的時候,也是不知其所以然。所以,這裡木辛老師會通過例子來給大家展示一下。


askquestion


<code>import tkinter as tk
import tkinter.messagebox as messagebox

class Window(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("歡迎來到木辛老師的Tkinter課堂")
        self.label_text = tk.StringVar()
        self.label_text.set('請選擇你的操作')


        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="打聲招呼", command=self.say_hello)
        hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))


        goodbye_button = tk.Button(self, text="再見吧", command=self.say_goodbye)
        goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))


    def say_hello(self):
        ret = messagebox.askquestion('你好', '吃(飯)了嗎?')
        print(ret)


    def say_goodbye(self):
        self.label_text.set('再見! \n (Closing in 2 seconds)')
        self.after(2000, self.destroy)




if __name__ == "__main__":
    window = Window()
    window.mainloop()

/<code>


通過message實例調用askquestion方法,可以對用戶發起一個提問。用戶通過點擊“yes”和“no”選項覺得自己回答的答案。

執行上述程序,效果就是這樣的。


使用Tkinter只需要幾行代碼就可快速實現用戶交互效果,試試?

彈出框的位置不是這樣分佈的,木辛老師為了大家能夠看清楚每個部分,特意把它們的位置調整了一下。

用戶如果點擊“yes”按鈕,Python就會在控制檯打印出“yes”字樣,而點擊“no”按鈕的話,則會打印出“no”字樣。

所以,你可以通過判斷返回的值,來決定如何應對用戶的回答。


askyesno

通過這種模式實現的彈出框和askquestion有一點點的不同。

<code>def say_hello(self):
    # ret = messagebox.askquestion('你好', '吃(飯)了嗎?')
    # print(ret)
    ret = messagebox.askyesno('你好', '吃(飯)了嗎?')
    print(ret)/<code>

通過實例,可以看到不同點是:使用askyesno方式,點擊“yes”返回的True,而點擊“no”返回的是False。


askokcancel

使用這種方式,按鈕會變成“Cancel”和“OK”兩種;而返回值則是點擊“OK”的時候返回True,“Cancel”的時候返回False。

使用Tkinter只需要幾行代碼就可快速實現用戶交互效果,試試?


askretrycancel


<code>def say_hello(self):
    ret = messagebox.askretrycancel('你好', '吃(飯)了嗎?')
    print(ret)/<code>
使用Tkinter只需要幾行代碼就可快速實現用戶交互效果,試試?

最後一種方式,是提供了重試按鈕和取消按鈕,如果在應用中需要用戶重新進行某項操作,這個彈框也是非常有用的。

同樣的,點擊“retry”按鈕會返回True,而“Cancel”按鈕則返回False。


其實這幾種方式都大同小異,只是Tkinter給我們包裝起來了。遇到對應的情況,直接使用對應的方式即可,而不用自己編寫一堆代碼。


用戶有話說

有時候,用戶需要表達更多的“想法”,不僅僅滿足於“點頭”或者“搖頭”。

這可咋辦?

難不成要用戶直接對著電腦屏幕說話?

嘿嘿,這個Tkinter也有解決辦法。


在Tkinter中,提供一種控件叫做Entry。通過這個控件可以實現接收用戶輸入更多“想法”的需求。

接下來,通過例子來看看效果。

<code>import tkinter as tk
import tkinter.messagebox as messagebox




class Window(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("歡迎來到木辛老師的Tkinter課堂")
        self.label_text = tk.StringVar()
        self.txt_slogan = tk.StringVar()
        self.label_text.set('木辛老師的課堂口號是什麼:')


        self.label = tk.Label(self, textvariable=self.label_text)
        self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)


        self.entry = tk.Entry(self, textvariable=self.txt_slogan)
        self.entry.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)


        hello_button = tk.Button(self, text="打聲招呼", command=self.say_hello)
        hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))


        goodbye_button = tk.Button(self, text="再見吧", command=self.say_goodbye)
        goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))


    def say_hello(self):
        ret = messagebox.askquestion('木辛老師課堂', '我們的口號是:%s !' % self.txt_slogan.get())
        print(ret)


    def say_goodbye(self):
        self.label_text.set('再見! \n (Closing in 2 seconds)')
        self.after(2000, self.destroy)




if __name__ == "__main__":
    window = Window()
    window.mainloop()

/<code> 


整體佈局是不需要改變的,我們添加了Entry控件,可以理解為平時使用的輸入框。

<code>self.entry = tk.Entry(self, textvariable=self.txt_slogan)
self.entry.pack(fill=tk.BOTH, expand=1, padx=100, pady=30)/<code>


並且,綁定了變量self.txt_slogan,通過這個綁定變量,就能隨時獲取到這個輸入框值。

隨後,通過通用的佈局方式,將這個控件放置到父窗口上,並設置水平和垂直方向上的邊距。

剛才提到了有一個變量可以實時獲取到輸入框的值,那應該怎麼用呢?

<code>def say_hello(self):
        ret = messagebox.askquestion('木辛老師課堂', '我們的口號是:%s !' % self.txt_slogan.get())
        print(ret)/<code>

就像代碼裡提到的,通過

<code>self.txt_slogan.get()/<code>

這個get()方法,可以得到這個變量的值。然後你就可以隨意使用這個值了。

執行下這個例子,看看效果。

使用Tkinter只需要幾行代碼就可快速實現用戶交互效果,試試?

實現一個功能就是這麼簡單,大家先玩玩試試吧!


好了,今天的知識點,大家掌握了嗎?如果還想學習更多簡單、好玩、有用的Python編程知識,不妨關注下木辛老師的Python編程課堂?



木辛老師的專欄正在參加#423知識節# #423頭條知識節# #423知識狂歡節# 歡迎每個熱愛學習的同學們來參加喲。

我們還提供了超大力度的折扣↓↓↓↓

滿200減120的大折扣券

又省錢,有乾貨,聰明如你,趕快搞起來吧~


咱們下節課再繼續學習Tkinter的知識吧。

快樂編程,快樂成長!


分享到:


相關文章: