[英]PyQt5, how to connect QSlider from a QGroupBox to a function
我想為滑塊創建一個回調。 但是由於我制作的滑塊是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的原因是我可以在其中添加其他小部件。
有幾個選項供您選擇。 您可以簡單地從函數中返回幾個小部件:
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
或類似方法來找到小部件。
findChild返回的是QSlider對象,您可能正在打印它,得到的內容類似於:
<PyQt5.QtWidgets.QSlider object at 0x7f6c521dedc8>
這只是返回__str__
,您可以在如何使用print()打印類的對象中找到更多信息? 。
所以我可以使用那個對象
slider = self.aGroup.findChild(QSlider)
slider.valueChanged.connect(self.valueChange)
盡管該選項可能有點臟,但從設計的角度來看,更好的選擇是創建一個從QGroupBox繼承並共享信號的類:
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)
然后,您可以通過以下方式使用它:
self.aGroup = MyGroupBox("SliderA",10,10,10,100)
self.bGroup = MyGroupBox("SliderB",10,10,10,100)
self.aGroup.valueChanged.connect(self.valueChange)
上面給出了一個標識,因為它是一個通過抽象內部元素來顯示某些屬性的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.