Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 我能用一个插槽装几个信号吗?_Qt_Pyqt_Signals_Pyside - Fatal编程技术网

Qt 我能用一个插槽装几个信号吗?

Qt 我能用一个插槽装几个信号吗?,qt,pyqt,signals,pyside,Qt,Pyqt,Signals,Pyside,我有几个按钮,每个按钮都有一个信号,每当单击按钮时,它会发出一个属性(比如,一个整数)。在父类中,我希望能够捕捉任何按钮的发射,并根据按钮的特定属性做出反应 我可以通过单独“连接”父类中的每个按钮来想办法做到这一点,但这似乎是错误的,而且很麻烦,因为在我的应用程序中,我添加和删除按钮是功能的一部分。我可能想错了。。。和建议?在Qt中,您可以用任何插槽连接任何信号。这也意味着您可以使用多个插槽连接单个信号,或使用单个插槽连接多个信号 现在,如果每个按钮都做不同的事情,并且没有那么多,我会手动将每个

我有几个按钮,每个按钮都有一个信号,每当单击按钮时,它会发出一个属性(比如,一个整数)。在父类中,我希望能够捕捉任何按钮的发射,并根据按钮的特定属性做出反应


我可以通过单独“连接”父类中的每个按钮来想办法做到这一点,但这似乎是错误的,而且很麻烦,因为在我的应用程序中,我添加和删除按钮是功能的一部分。我可能想错了。。。和建议?

在Qt中,您可以用任何插槽连接任何信号。这也意味着您可以使用多个插槽连接单个信号,或使用单个插槽连接多个信号

现在,如果每个按钮都做不同的事情,并且没有那么多,我会手动将每个按钮连接到不同的插槽,以便将它们很好地分开

在您的情况下,您可能希望以自动方式将所有按钮连接到一个插槽中,并在该插槽中通过
self.sender()
确定原始按钮,然后使用此信息执行操作

例如:

每当小部件中出现新按钮时

new_button.clicked.connect(self.parent().buttons_clicked)
# always the same recipient
在父类中:

def buttons_clicked(self):
  button = self.sender()
  # do something useful depending on the button that sent the signal
这里缺少的是传递属性的方式(数字或其他)。您没有指定现在如何操作,但连接到同一插槽可能不会对其进行重大更改



编辑:作为旁注,Qt中也有一些事件大致相同。这是一次有趣的讨论。根据您的问题(许多动态按钮),与其连接和断开连接,不如发送事件。

您可以这样做:

from functools import partial

def buttonEvent(i):
    print(i)

for i in range(5):
    button = QtWidgets.QPushButton("Button: " + str(i))
    button.clicked.connect(partial(buttonEvent, i))

在Qt中,需要将信号连接到函数名,不能指定参数或任何东西。当涉及到许多独特的小部件或生成的小部件或诸如此类的东西时,这很烦人。两个合适的解决方案是使用partial和lambda。当我想调用一个参数独立于变量的函数时,我使用lambda(例如,
button.clicked.connect(lambda:print(“button clicked”))
)。如果函数调用依赖于稍后将更改的某个变量,则需要使用partial,这将立即保存变量内容。Lambda将等待调用以使用变量(因此,在上述情况下,如果使用Lambda,则所有按钮都将打印“4”)。

或者也可以帮助您。谢谢!我认为这也在我脑海中整理出了关于父母关系安排的事情;)