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

环境: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的参数进行绑定。(我比较推荐使用方法二)。好了,今天就说到这吧,希望大家多多支持我们!

时间: 2020-03-02

Python tkinter布局与按钮间距设置方式

新建label与button,并设置位置(grid) import tkinter as tk root = tk.Tk() label = tk.Label(root, text = 'Label') label.grid(column = 3, row = 8) button = tk.Button(root, text = 'Button') button.grid(column = 5, row = 1) 按钮间距设置 col_count, row_count = root.grid_s

Python Tkinter Entry和Text的添加与使用详解

输入框和消息显示框是常用的GUI界面部件,其中输入框的重要任务就是返回一个输入的字符串,而消息显示框则要显示指定的信息. 功能:输入一个密码,如果密码正确则显示confirm,不正确则显示sorry __author__ = 'freedom' from Tkinter import * class App(Frame): def __init__(self,master): frame = Frame(master) frame.grid() self.ent = Entry(frame,sh

Python tkinter 下拉日历控件代码

tkinter 下拉日历控件 网上找的不完善的Tk日历进行修改的,可以快捷的找到并返回日期. 效果如下图,上面的是控件,下面的是调用demo窗口 如下所示: # -*- coding: utf-8 -*- import calendar import tkinter as tk import tkinter.font as tkFont from tkinter import ttk datetime = calendar.datetime.datetime timedelta = calend

python tkinter之 复选、文本、下拉的实现

我就废话不多说了,直接看代码吧! import tkinter as tk from tkinter import ttk win = tk.Tk() win.title("Python GUI") # 添加标题 ttk.Label(win, text="Chooes a number").grid(column=1, row=0) # 添加一个标签0 ttk.Label(win, text="Enter a name:").grid(colum

python tkinter之顶层菜单、弹出菜单实例

我就废话不多说了,直接看代码吧! from tkinter import * def sys_callbak():       pass def fun_callbak():       pass def no_thing(event):       popmenu.post(event.x_root,event.y_root) master = Tk() master.title('新闻自动抓取') menubar = Menu(master) sysmenu = Menu(menubar,t

python tkinter 设置窗口大小不可缩放实例

解决方法 将窗口最大尺寸和最小尺寸设置为一样即可 top = Tk() # 创建顶级窗口 top.minsize(560, 545) # 最小尺寸 top.maxsize(560, 545) # 最大尺寸 top.mainloop() 补充知识:tkinter改变下拉列表(Combobox)的选项值 定义下拉列表: # 此处省略父容器的定义 ... # 定义下拉列表选项值集合 self.Combo5List = ['0', '1', '2', '3'] # 定义下拉列表Combobox self

在python tkinter界面中添加按钮的实例

tkinter是python自带的GUI库,可以实现简单的GUI交互,该例子添加了五种不同效果的Button,如图: from tkinter import * from tkinter import messagebox #python3.0的messagebox,属于tkinter的一个组件 top = Tk() top.title("button test") def callback(): messagebox.showinfo("Python command&quo

Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例

我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126) 本代码以MIT许可协议发布 2014-04-15 创建 ''' import tkinter as tk from tkinter import ttk def get_screen_size(window): return windo

python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例

注意主窗口一定要为tk.Tk(),在主窗口上通过button的点击相应子函数创建子窗口,注意此时创建出来的窗口必须是Toplevel,否则出错. 至于用图片在窗口上绘图,则按代码所示即可. # -*- coding: utf-8 -*- """ Created on Wed Oct 26 20:32:52 2016 @author: min """ import Tkinter as tk from PIL import Image, Image

Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解

本文实例讲述了Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法.分享给大家供大家参考,具体如下: 相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Message Text Listbox Checkbutton Radiobutton Scale Scrollbar 首发时间:2018-03-04 16:39 Python的GU

Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 filedialog 介绍 使用 首发时间:2018-03-04 22:18 messagebox: 介绍:messagebox是tkinter中的消息框.对话框 使用: 导入模块:import tkinter.messagebox 选择消息框的模式: 提示消息框:[返回"ok"] tkint

Python GUI之tkinter窗口视窗教程大集合(推荐)

一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 二.Tkinter是什么 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多直观的功能,比如想开发一个计算器,如果只是一个程序输入,输

Python GUI编程学习笔记之tkinter事件绑定操作详解

本文实例讲述了Python GUI编程学习笔记之tkinter事件绑定操作.分享给大家供大家参考,具体如下: 相关内容: command bind protocol 首发时间:2018-03-04 19:26 command: command是控件中的一个参数,如果使得command=函数,那么点击控件的时候将会触发函数 能够定义command的常见控件有: Button.Menu- 调用函数时,默认是没有参数传入的,如果要强制传入参数,可以考虑使用lambda from tkinter imp

Python GUI编程学习笔记之tkinter界面布局显示详解

本文实例讲述了Python GUI编程学习笔记之tkinter界面布局显示.分享给大家供大家参考,具体如下: 相关内容: pack 介绍 常用参数 使用情况 常用函数 grid 介绍 常用参数 使用情况 常用函数 place 介绍 常用参数 使用情况 常用函数 首发时间:2018-03-04 14:20 pack: 介绍: pack几何管理器按行或列打包小部件. 可以使用填充fill,展开expand和靠边side等选项来控制此几何体管理器. pack的排放控件的形式就像将一个个控件按大小从上到

Python GUI编程完整示例

本文实例讲述了Python GUI编程.分享给大家供大家参考,具体如下: import os from time import sleep from tkinter import * from tkinter.messagebox import showinfo class DirList(object): def __init__(self, initdir=None): self.top = Tk() self.label = Label(master=self.top, text='Dir

Python GUI编程 文本弹窗的实例

如下所示: out = subprocess.getstatusoutput('adb shell pm list packages') top = tk.Toplevel() top.title('包名列表') top.geometry('%dx%d' % (400, 1200)) # 设置窗口大小 t = Text(top, width=400, height=900) t.insert('1.0', "{}".format(out[1])) # 插入文本,用引号引起来"

Python爬虫爬取一个网页上的图片地址实例代码

本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request.urlopen(url).read() return html print(getHtml(http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%E5%A3%81%E7%BA%B8&ct=201326592&am

详解Python并发编程之创建多线程的几种方法

大家好,并发编程 今天开始进入第二篇. 今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础.学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章. 本文目录 学会使用函数创建多线程 学会使用类创建多线程 多线程:必学函数讲解 经过总结,Python创建多线程主要有如下两种方法: 函数 类 接下来,我们就来揭开多线程的神秘面纱. . 学会使用函数创建多线程 在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多