我想为滑块创建一个回调。但是由于我制作的滑块是groupbox函数的一部分。我不确定如何连接它:
def createExampleGroup(self, name, interval, steps, min, max):
groupBox = QGroupBox(name)
slider = QSlider(Qt.Horizontal)
slider.setFocusPolicy(Qt.StrongFocus)
slider.setTickPosition(QSlider.TicksBothSides)
slider.setMinimum(min)
slider.setMaximum(max)
slider.setTickInterval(interval)
slider.setSingleStep(steps)
vbox = QVBoxLayout()
vbox.addWidget(slider)
# vbox.addStretch(1)
groupBox.setLayout(vbox)
return groupBox
def valueChange(self):
print ("Update Slider")
self.aGroup = self.createExampleGroup("SliderA",10,10,10,100)
self.bGroup = self.createExampleGroup("SliderB",10,10,10,100)
因此,我不确定如何访问每个组中的滑块并将它们连接到valueChange
。并且还让valueChange()
根据它是哪个滑块进行不同的更新。我尝试了self.aGroup.findChild(QSlider)
,但是它返回一个地址,所以我不知道如何使用它。我使用group的原因是我可以在其中添加其他小部件。
答案 0 :(得分:1)
有几个选项供您选择。您只需从函数中返回几个小部件即可:
def create_example_group(...) # python naming convention!
...
return group_box, slider
self.a_group, a_slider = self.create_example_group(...)
a_slider.changeValue.connect(...)
或者,您可以给滑块指定一个唯一的名称,并在组小部件上使用findChildren
或类似方法来找到小部件。
答案 1 :(得分:1)
findChild返回的是QSlider对象,您可能正在打印它,得到的内容类似于:
wwwroot
这只是返回<PyQt5.QtWidgets.QSlider object at 0x7f6c521dedc8>
的内容,您可以在How to print objects of class using print()?中找到更多信息。
所以我可以使用那个对象
__str__
尽管该选项可能有点脏,但从设计的角度来看,更好的选择是创建一个从QGroupBox继承并共享信号的类:
slider = self.aGroup.findChild(QSlider)
slider.valueChanged.connect(self.valueChange)
然后您可以通过以下方式使用它:
class MyGroupBox(QGroupBox):
valueChanged = pyqtSignal(int)
def __init__(self, name, interval, steps, min, max):
super(MyGroupBox, self).__init__(name)
slider = QSlider(Qt.Horizontal)
slider.setFocusPolicy(Qt.StrongFocus)
slider.setTickPosition(QSlider.TicksBothSides)
slider.setMinimum(min)
slider.setMaximum(max)
slider.setTickInterval(interval)
slider.setSingleStep(steps)
slider.valueChanged.connect(self.valueChanged)
vbox = QVBoxLayout()
vbox.addWidget(slider)
# vbox.addStretch(1)
self.setLayout(vbox)
上面给出了一个标识,因为它是一个通过抽象内部元素来显示某些属性的类。