Python中Tkinter解决button的command无返回值问题

Tkinter是什么

Tkinter是Python的标准GUI库。Python使用Tkinter可以快速地创建GUI应用程序。由于Tkinter属于Python标准库,就不需要使用pip安装,直接导入使用即可。

基础操作

见这篇文章,写的挺好,我就不逐字逐句的搬运了:
超全!Tkinter 使用教程!4000字!
https://mp.weixin.qq.com/s/LjIHu1qHVIjGuJfQHrBndw

这里分享一个遇见的问题:

问题:Button执行命令的时候,获取不到返回值怎么办?
场景:我需要:点一下button 按钮,执行一次数据处理的操作,然后把操作产生的数据,返回到我的entry 文本框里进行展示。
比如:这段代码是button的定义代码。command后边跟着需要执行的命令函数。但是ta居然没有返回值接收。这就尴尬了,没返回值接收,那程序处理之后的结果就没法展示。

button = tkt.Button(tk, text='处理数据', font=('微软雅黑', 12), command=fake_date) #fake_data是一个函数,用来处理数据的。
button.grid(row=1, column=1, padx=10, pady=10)

头疼点:我查了官方api,没找到command如何处理函数的返回值。
而获取不到返回值,那就代表着没办法展示和处理函数的返回数据。

解决思路
1、重写
是不是可以重写一下tkinter的button的代码,让程序支持接收返回值?----------------------------理论可行,难度较大。不会写,有会的盆友可以试试。

2、新增函数作为连接
我现在有函数A,来进行数据处理。
是不是可以定义另一个函数B,对函数A的处理结果进行处理,并进行展示?
然后用button的command参数去执行我的函数B

也就是:

  1. 函数A进行数据处理
  2. 函数B进行数据展示
  3. Button方法的command参数,来执行函数B进行数据展示。
  4. 在执行B的过程中,就执行了A

决定按照思路2的方法实现。
具体代码:

import tkinter as tkt
from id_validator import validator
import faker


def fake_date():
    fake = faker.Faker(locale='zh_CN')
    name = fake.name()
    phone = fake.phone_number()
    credit_card = fake.credit_card_number()
    job = fake.job()
    email = fake.email()

    company = fake.company()
    id_tmp = fake.ssn()
    id = id_tmp
    age = dict(validator.get_info(id_tmp))['age']
    addr = dict(validator.get_info(id_tmp))['address']
    # print(f'Job is done!id:\n{id}')
    return id, name, phone, credit_card, job, email, company, age, addr

tk = tkt.Tk()
tk.geometry('600x600+400+300')
tk.title('Tkinter小例子')

lable_name = tkt.Label(tk, text='点击按钮即可', font=('微软雅黑', 12),fg='black')
lable_name.grid(row=0, column=0, padx=10, pady=10)
"""
text参数用于指定显示的文本;
font参数用于指定字体大小和字体样式;
fg参数用于指定字体颜色;
"""

def show_info():
    """
    Entrys是一个可以输入文本的组件,可以通过设置其width属性来控制宽度;
    row=0,column=1表示我们将输入框控件,放在第1行第2列的位置;
    python中,下标是从0开始的。所以,如果我们想放在第1行第2列,那么我们写row=0,column=1;
    """
    var = tkt.StringVar()
    var.set(fake_date()[1])
    ent = tkt.Entry(tk, textvariable=var, font=('微软雅黑', 12), width=20)
    ent.grid(row=1, column=3, padx=10, pady=10)


button = tkt.Button(tk, text='点击生成数据', font=('微软雅黑', 12), command=show_info)
button.grid(row=1, column=1, padx=10, pady=10)


"""
command=func表示调用最开始定义的func函数。
func函数一定要在这句代码之前,因为这里需要调用这个func函数。
"""

# 显示窗体
tk.mainloop()

实现效果:

Python中Tkinter解决button的command无返回值问题_第1张图片

你可能感兴趣的:(Python学习,python)