关于Python Tkinter Button控件command传参问题的解决方式


Posted in Python onMarch 04, 2020

环境:Ubuntu14、Python3.4、Pycharm2018

一、使用command=lambda: 的形式传参

代码如下

from tkinter import *
import tkinter.messagebox as messagebox


def createpage(master):
  master = Frame(root)
  master.pack()
  Label(master, text='num1').grid(row=0, column=0, stick=W, pady=10)
  e1 = Entry(master)
  e1.grid(row=0, column=1, stick=E)
  Label(master, text='num2').grid(row=1, column=0, stick=W, pady=10)
  e2 = Entry(master)
  e2.grid(row=1, column=1, stick=E)
  # Button传递参数
  Button(
    master, text='加', command=lambda: btn_def(e1.get(), e2.get())
  ).grid(row=2, column=0, stick=W)
  Button(master, text='减').grid(row=2, column=1, stick=E)
  Label(master, text='说明').grid(row=3, column=0, stick=W, pady=10)
  Label(master, text='只写了加法(请输入简单数字测试button传参)').grid(
    row=3, column=1, stick=E
  )

def btn_def(num1, num2):
  num = int(num1) + int(num2)
  messagebox.showinfo('结果', '%d' % num)

if __name__ == '__main__':
  root = Tk()
  root.title('Demo')
  root.geometry('400x150')
  createpage(root)
  root.mainloop()

二、使用StringVar()和Entry textvariable对参数进行绑定

代码如下

from tkinter import *
import tkinter.messagebox as messagebox

class A:
  """
  使用StringVar() 和 textvariable
  对Button进行绑定
  实现Button对数据进行操作
  解决Button传参问题
  StringVar()的数需要使用.get()获取值
  """
  def __init__(self, master):
    self.root = Frame(master)
    self.num1 = StringVar() # 第一个数字
    self.num2 = StringVar() # 第一个数字
    self.createpage()

  def createpage(self):
    self.root.pack()
    Label(self.root, text='num1').grid(row=0, column=0, stick=W, pady=10)
    # textvariable和StringVar的num1绑定
    Entry(self.root, textvariable=self.num1).grid(row=0, column=1, stick=E)
    Label(self.root, text='num2').grid(row=1, column=0, stick=W, pady=10)
    # textvariable和StringVar的num2绑定
    Entry(self.root, textvariable=self.num2).grid(row=1, column=1, stick=E)
    # Button传递参数
    Button(
      self.root, text='加', command=self.btn_def
    ).grid(row=2, column=0, stick=W)
    Button(self.root, text='减').grid(row=2, column=1, stick=E)
    Label(self.root, text='说明').grid(row=3, column=0, stick=W, pady=10)
    Label(self.root, text='只写了加法(请输入简单数字测试button传参)').grid(
      row=3, column=1, stick=E
    )

  def btn_def(self):
    # 使用.get()获取值
    num = int(self.num1.get()) + int(self.num2.get())
    messagebox.showinfo('结果', '%d' % num)

if __name__ == '__main__':
  root = Tk()
  root.title('Demo2')
  root.geometry('400x150')
  A(root)
  root.mainloop()

三、总结

以上两种方式都是使用了Button进行数据事件处理,方法一为Button command下传递参数,方法二为控件下使用textvariable对StringVar的参数进行绑定。(我比较推荐使用方法二)。好了,今天就说到这吧,希望大家多多支持三水点靠木!

Python 相关文章推荐
对于Python编程中一些重用与缩减的建议
Apr 14 Python
python实现统计代码行数的方法
May 22 Python
python3 shelve模块的详解
Jul 08 Python
Python中的id()函数指的什么
Oct 17 Python
python实现合并两个排序的链表
Mar 03 Python
django的auth认证,authenticate和装饰器功能详解
Jul 25 Python
python 列表推导式使用详解
Aug 29 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
基于python实现坦克大战游戏
Oct 27 Python
Django drf请求模块源码解析
Jun 08 Python
Python进程间的通信之语法学习
Apr 11 Python
在python tkinter界面中添加按钮的实例
Mar 04 #Python
Python tkinter布局与按钮间距设置方式
Mar 04 #Python
python 按钮点击关闭窗口的实现
Mar 04 #Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 #Python
python虚拟环境模块venv使用及示例
Mar 04 #Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 #Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 #Python
You might like
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python with的用法
2014/08/22 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
Python之时间和日期使用小结
2019/02/14 Python
python+pyqt5编写md5生成器
2019/03/18 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
python实现简单飞行棋
2020/02/06 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
薇姿法国官网:Vichy法国
2021/01/28 全球购物
生产文员岗位职责
2014/04/05 职场文书
污水处理保证书
2015/05/09 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
Python 中random 库的详细使用
2021/06/03 Python
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
公历12个月名称的由来
2022/04/12 杂记