首页 > 解决方案 > tkinter 按钮的多个命令

问题描述

我一直在尝试在 1 个按钮中执行 2 个命令。我读过使用 lambda 可以解决问题。但我的情况有点不同。按下按钮时,一个命令是破坏现有的 GUI,第二个命令是打开另一个 SERVER GUI。下面是我现有的按钮功能。

exit_button = Button(topFrame, text='Quit', command=window.destroy)

如何使用相同的按钮打开另一个 GUI?

感谢您的任何帮助。

编辑:-

我现在创建了以下函数:

def close_func():
os.kill(os.getpid(), signal.SIGINT)
GUI_Interface()
window.destroy()
server_socket.close()

GUI_Interface 是我需要在关闭现有 .py 文件后调用的函数。如果我将 GUI_Interface 作为 close_func() 的第一个命令,那么它真的不会返回到第二步并且永远不会关闭现有的.py 文件。

如果我把 GUI_Interface 放在最后,它只会关闭现有的并且 nevr 打开新的 .py 文件的功能

标签: python-3.xtkinterbuttonlambda

解决方案


至少三个选项:

使用or(带有 lambda if 参数):

from tkinter import Tk, Button


root = Tk()

Button(root, text='Press', command=lambda: print('hello') or root.destroy() or print('hi')).pack()

root.mainloop()

使用很重要,or因为and没有用(根本不知道为什么或如何工作)

或使用函数定义:

from tkinter import Tk, Button


def func():
    print('hello')
    root.destroy()
    print('hi')


root = Tk()

Button(root, text='Press', command=func).pack()

root.mainloop()

或带有 lambda 的列表:

from tkinter import Tk, Button


def func():
    print('hello')
    root.destroy()
    print('hi')


root = Tk()

Button(root, text='Press', command=lambda: [print('hello'), root.destroy()]).pack()

root.mainloop()

推荐阅读