当前位置:   article > 正文

Python tkinter 绑定多个函数 + 传递参数详解_python tkinter 控件不同动作绑定函数的选择

python tkinter 控件不同动作绑定函数的选择

1 概述

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

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

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/70342
推荐阅读
相关标签
  

闽ICP备14008679号