【问题标题】:QtGui.QPushButton.clicked.connect() with function that takes argumentsQtGui.QPushButton.clicked.connect() 带有带参数的函数
【发布时间】:2016-08-08 12:20:56
【问题描述】:

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

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

产生以下 RuntimeError:Failed to connect signal clicked()

我怎样才能做到这一点?

【问题讨论】:

  • my_btn.clicked.connect(lambda: my_func(my_int, my_str, my_second_int)).
  • 在表格内使用按钮时使用 lambda 对我不起作用,似乎连接槽保留了最后一条记录的参数。

标签: python-2.7 user-interface pyqt pyside


【解决方案1】:

使用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信号。

【讨论】:

  • 我接受了这个答案,因为它解释了为什么我所做的事情不起作用,但我认为 ekhumoro 的解决方案更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2015-04-26
  • 1970-01-01
相关资源
最近更新 更多