使用Tkinter只需要几行代码就可快速实现用户交互效果,试试?

我叫你,你敢答应吗?

如何通过Tkinter从用户那里“套取”信息,木辛老师有一招。


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


有的时候,你可能需要询问用户一些事情,比如说

“你吃(饭)了吗?”

哦!好吧,其实这是在国内几乎很多地方的传统,也是很多时候熟人见面,不得不“寒暄”的托词。


在Tkinter中,如果你想发起这么“无聊”的问候,也不是没有办法。

Tkinter提供了这么几种方式,结合上节课讲到的message box,实现问候用户的目的:

askquestionaskyesnoaskokcancelaskretrycancel


看完是不是一脸懵懵哒呢!


木辛老师刚开始接触的时候,也是不知其所以然。所以,这里木辛老师会通过例子来给大家展示一下。


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”选项觉得自己回答的答案。

执行上述程序,效果就是这样的。


弹出框的位置不是这样分布的,木辛老师为了大家能够看清楚每个部分,特意把它们的位置调整了一下。

用户如果点击“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。


askretrycancel


<code>def say_hello(self):     ret = messagebox.askretrycancel('你好', '吃(饭)了吗?')     print(ret)/<code>

最后一种方式,是提供了重试按钮和取消按钮,如果在应用中需要用户重新进行某项操作,这个弹框也是非常有用的。

同样的,点击“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()方法,可以得到这个变量的值。然后你就可以随意使用这个值了。

执行下这个例子,看看效果。

实现一个功能就是这么简单,大家先玩玩试试吧!


好了,今天的知识点,大家掌握了吗?如果还想学习更多简单、好玩、有用的Python编程知识,不妨关注下木辛老师的Python编程课堂?



木辛老师的专栏正在参加#423知识节# #423头条知识节# #423知识狂欢节# 欢迎每个热爱学习的同学们来参加哟。

我们还提供了超大力度的折扣↓↓↓↓

满200减120的大折扣券

又省钱,有干货,聪明如你,赶快搞起来吧~


咱们下节课再继续学习Tkinter的知识吧。

快乐编程,快乐成长!