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_int
、my_str
和 my_second_int
调用 my_func
,并且该部分功能连接到按钮 clicked
信号。
我想 运行 一个在单击 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_int
、my_str
和 my_second_int
调用 my_func
,并且该部分功能连接到按钮 clicked
信号。