Python tkinter 绑定多个函数 + 传递参数详解

1 概述

1. 方法:使用 lambda
   (1) lambda: func1(1, 2)                 # 单个函数
   (2) lambda: [func1(1, 2), func2(a, b)]  # 多个函数

2. 说明
   (1) 函数必须带 '()', 无论是否有参数
   (2) 调用多个函数时,'[]' 不能省略

2 实例

2.1 无参数

import tkinter


def func():
    print("Click !")


def main():
    window = tkinter.Tk()
    window.title('无参数')
    window.geometry('300x100+500+300')

    btn = tkinter.Button(text='按钮', width=10, height=3, command=func)
    btn.pack(pady=10)

    window.mainloop()


if __name__ == '__main__':
    main()

2.2 有参数

import tkinter


def func(x, y):
    print(f'x = {x}, y = {y}')


def main():
    window = tkinter.Tk()
    window.title('有参数')
    window.geometry('300x100+500+300')

    btn = tkinter.Button(text='按钮', width=10, height=3,
                         command=lambda: func(1, 2))
    btn.pack(pady=10)

    window.mainloop()


if __name__ == '__main__':
    main()

2.3 多个函数

import tkinter


def func1(a):
    print(f'Say: a = {a}')


def func2(a, b):
    print(f'Say: a = {a}, b = {b}')


def main():
    window = tkinter.Tk()
    window.title('无参数')
    window.geometry('300x100+500+300')

    btn = tkinter.Button(text='按钮', width=10, height=3,
                         command=lambda: [func1(1), func2(1, 2)])
    btn.pack(pady=10)

    window.mainloop()


if __name__ == '__main__':
    main()

3 实战

from tkinter import *
import logging


class Window:
    def __init__(self):
        self.window = Tk()
        self.window.title('演示写入数据')

        # 获取屏幕大小
        screenwidth = self.window.winfo_screenwidth()  # 屏幕宽
        screenheight = self.window.winfo_screenheight()  # 屏幕高

        # 窗口居中
        size = self.window_of_center(screenwidth, screenheight)
        self.window.geometry(size)
        self.window.resizable(0, 0)  # 禁止调整大小

        # 输入的数据
        self.message = StringVar()

        # 页面布局
        self.layout()
        self.window.mainloop()

    @staticmethod
    def window_of_center(screenwidth, screenheight, width=400, height=200):
        """
        设置窗口居中
        :param screenwidth: 屏幕宽
        :param screenheight: 屏幕高
        :param width: 窗体宽
        :param height: 窗体高
        :return: 窗体大小及位置 size
        """
        # 设置窗口在屏幕中间
        size = '%dx%d+%d+%d' % (width,
                                height,
                                (screenwidth - width) / 2,
                                (screenheight - height) / 2)

        logging.info(f'屏幕(宽 x 高): {screenwidth} x {screenheight}')
        logging.info(f'窗口(宽 x 高): {width} x {height}')

        return size

    def layout(self):
        """
        页面布局
        :return:
        """
        # 标签
        hint = Label(self.window, text='请输入:', fg='blue', font=('宋体', 10), anchor='e')
        entry = Entry(self.window, bd=1, textvariable=self.message)
        btn = Button(self.window, text='确定', command=lambda: self.show_text(text))
        text = Text(self.window, width=45, height=10)

        # 布局
        hint.place(x=5, y=10, width=80, height=20)
        entry.place(x=95, y=10, width=200, height=20)
        btn.place(x=300, y=10, height=20)
        text.place(x=40, y=50)

    def show_text(self, text):
        """
        插入文本内容,带参数
        :param text: 文本框
        :return:
        """
        # 写入 text
        text.insert(INSERT, self.message.get())
        logging.info(f'写入 message = {self.message.get()}')

        # 清空
        self.message.set('')
        logging.info('清空 message 成功')


if __name__ == '__main__':
    # 设置日志等级
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    # 调用窗体
    Window()
  • 13
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值