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

我叫你,你敢答应吗?

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

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

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

“你吃(饭)了吗?”

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

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

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

  • askquestion
  • askyesno
  • askokcancel
  • askretrycancel

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

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

askquestion

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

通过message实例调用askquestion方法,可以对用户发起一个提问。用户通过点击“yes”和“no”选项觉得自己回答的答案。

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

174c525422f444aba8ef2a7693fee64e

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

用户如果点击“yes”按钮,Python就会在控制台打印出“yes”字样,而点击“no”按钮的话,则会打印出“no”字样。

所以,你可以通过判断返回的值,来决定如何应对用户的回答。

askyesno

通过这种模式实现的弹出框和askquestion有一点点的不同。

def say_hello(self):    # ret = messagebox.askquestion('你好', '吃(饭)了吗?')    # print(ret)    ret = messagebox.askyesno('你好', '吃(饭)了吗?')    print(ret)

通过实例,可以看到不同点是:使用askyesno方式,点击“yes”返回的True,而点击“no”返回的是False。

askokcancel

使用这种方式,按钮会变成“Cancel”和“OK”两种;而返回值则是点击“OK”的时候返回True,“Cancel”的时候返回False。

bc10922e640946a395486e97546cbb27

askretrycancel

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

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

同样的,点击“retry”按钮会返回True,而“Cancel”按钮则返回False。

其实这几种方式都大同小异,只是Tkinter给我们包装起来了。遇到对应的情况,直接使用对应的方式即可,而不用自己编写一堆代码。

用户有话说

有时候,用户需要表达更多的“想法”,不仅仅满足于“点头”或者“摇头”。

这可咋办?

难不成要用户直接对着电脑屏幕说话?

嘿嘿,这个Tkinter也有解决办法。

在Tkinter中,提供一种控件叫做Entry。通过这个控件可以实现接收用户输入更多“想法”的需求。

接下来,通过例子来看看效果。

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

整体布局是不需要改变的,我们添加了Entry控件,可以理解为平时使用的输入框。

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

并且,绑定了变量self.txt_slogan,通过这个绑定变量,就能随时获取到这个输入框值。

随后,通过通用的布局方式,将这个控件放置到父窗口上,并设置水平和垂直方向上的边距。

刚才提到了有一个变量可以实时获取到输入框的值,那应该怎么用呢?

def say_hello(self):        ret = messagebox.askquestion('木辛老师课堂', '我们的口号是:%s !' % self.txt_slogan.get())        print(ret)

就像代码里提到的,通过

self.txt_slogan.get()

这个get()方法,可以得到这个变量的值。然后你就可以随意使用这个值了。

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

ab2e34e3021c4ad3ac214de8c6611533

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值