QtGui.QPushButton.clicked.connect() 带有带参数的函数

QtGui.QPushButton.clicked.connect() with function that takes arguments

我想 运行 一个在单击 QtGui.QPushButton 时接受参数(例如 my_func(int, str, int))的函数。以下代码

my_btn = QtGui.QPushButton()
my_btn.clicked.connect(my_func(my_int, my_str, my_second_int))

产生以下运行时错误:Failed to connect signal clicked().

我怎样才能做到这一点?

使用connect时,只传递可调用函数

my_btn.clicked.connect(my_func)

在您的示例中,您 实际上在连接代码 运行 之前调用了 my_func 函数 。所以它试图连接从 my_func 返回的任何值,但它不起作用。

您要做的是创建一个 partial 函数,该函数已经预先填充了部分或全部函数参数。 Python 在标准库中有一个函数可以做到这一点,叫做 functools.partial

from functools import partial

my_btn.clicked.connect(partial(my_func, my_int, my_str, my_second_int))

这将创建一个 partial 函数,它将使用位置参数 my_intmy_strmy_second_int 调用 my_func ,并且该部分功能连接到按钮 clicked 信号。