gpt4 book ai didi

python - 当多个小部件共享相同的回调时识别源小部件

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:41 24 4
gpt4 key购买 nike

我在循环中创建多个小部件,它们都共享相同的回调。我的问题是识别触发回调的小部件。

我尝试将小部件的索引作为回调的参数,如下所示:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QSlider, QVBoxLayout, QWidget
import sys

class Foo(QWidget):
def __init__(self, parent=None):
super().__init__(parent)

self.sliders = []
for n in range(10):
slider = QSlider(Qt.Horizontal)
slider.valueChanged.connect(lambda: self.on_slider(n))
self.sliders.append(slider)

layout = QVBoxLayout()
for slider in self.sliders:
layout.addWidget(slider)
self.setLayout(layout)

def on_slider(self, n):
print(n)


app = QApplication(sys.argv)
gui = Foo()
gui.show()
sys.exit(app.exec())

但是,对于移动的任何 slider ,这都会打印 9

最佳答案

要获取哪个对象发出了信号,有几种形式,例如:

  1. 您必须首先传递返回信号的参数,然后传递其他参数。
<小时/>
slider.valueChanged.connect(lambda val, n=n: self.on_slider(val, n))

[...]

def on_slider(self, val, n):
print(n, val)

完整代码:

class Foo(QWidget):
def __init__(self, parent=None):
super().__init__(parent)

self.sliders = []
for n in range(10):
slider = QSlider(Qt.Horizontal)
slider.valueChanged.connect(lambda val, n=n: self.on_slider(val, n))
self.sliders.append(slider)

layout = QVBoxLayout()
for slider in self.sliders:
layout.addWidget(slider)
self.setLayout(layout)

def on_slider(self, val, n):
print(n)

2- 另一种方法是使用 objectNamesetObjectName 以及返回发出信号的对象的 sender 函数。

<小时/>
for n in range(10):
slider = QSlider(Qt.Horizontal)
slider.setObjectName(str(n))
slider.valueChanged.connect(self.on_slider)

[...]

def on_slider(self, val):
print(self.sender().objectName(), val)

完整代码:

class Foo(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
layout = QVBoxLayout(self)

for n in range(10):
slider = QSlider(Qt.Horizontal)
slider.setObjectName(str(n))
slider.valueChanged.connect(self.on_slider)
layout.addWidget(slider)

def on_slider(self, val):
print(self.sender().objectName(), val)

关于python - 当多个小部件共享相同的回调时识别源小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44328459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com