2024-09-28 05:22:07 发布
网友
我有一个滑块和一个包含整数的文本框(是否有一个专用的整数框?)在PyQt5中并排显示。在
我需要这两个值同步,我现在的方法是用一个QtTimer和if语句来检测一个值是否比另一个值更改得更晚,然后更新相反的元素。我被告知这是“骇人听闻的”,我想知道有没有合适的方法来做这件事。在
您可以看到文本框值和滑块,我需要同步在下面的图像的空白区域。在
你可以直接将每个滑块连接到另一个滑块上。我不知道你想要的滑块之间的确切连接,但它可能看起来像这样。在
max_player_slider.valueChanged.connect(self.slider1_fu) npc_stream_slider.valueChanged.conenct(self.slider2_fu) def slider1_fu(self): # do stuff with the npc_stream_slider def slider2_fu(self): # do stuff with the max_player_slider
编辑:这里有一个Tutorial on YouTube可能会有帮助。在
简单的解决方案是将每个滑块/数字框的valueChanged连接到同步值的插槽
valueChanged
self.slider1.valueChanged.connect(self.handleSlider1ValueChange) self.numbox1.valueChanged.connect(self.handleNumbox1ValueChange) @QtCore.pyqtSlot(int) def handleSlider1ValueChange(self, value): self.numbox1.setValue(value) @QtCore.pyqtSlot(int) def handleNumbox1ValueChange(self.value): self.slider1.setValue(value)
更好的解决方案是定义一个在内部处理所有事情的自定义滑块类。这样,您只需处理一次同步。在
编辑:对于Ekhurvo的评论,可以简化为
class CustomSlider(QtWidgets.QWidget): def __init__(self, *args, **kwargs): super(CustomSlider, self).__init__(*args, **kwargs) self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) self.numbox = QtWidgets.QSpinBox() self.numbox.setRange(self.slider.minimum(), self.slider.maximum()) self.slider.valueChanged.connect(self.numbox.setValue) self.slider.rangeChanged.connect(self.numbox.setRange) self.numbox.valueChanged.connect(self.slider.setValue) layout = QtWidgets.QHBoxLayout(self) layout.addWidget(self.numbox) layout.addWidget(self.slider)
您可能还想模拟一些QSlider方法来更改范围和值。注意,我们不需要显式地在self.numbox上设置任何内容,因为上面的信号/插槽连接会处理它。在
QSlider
self.numbox
@QtCore.pyqtSlot(int) def setMinimum(self, minval): self.slider.setMinimum(minval) @QtCore.pyqtSlot(int) def setMaximum(self, maxval): self.slider.setMaximum(maxval) @QtCore.pyqtSlot(int, int) def setRange(self, minval, maxval): self.slider.setRange(minval, maxval) @QtCore.pyqtSlot(int) def setValue(self, value): self.slider.setValue(value)
你可以直接将每个滑块连接到另一个滑块上。我不知道你想要的滑块之间的确切连接,但它可能看起来像这样。在
编辑:这里有一个Tutorial on YouTube可能会有帮助。在
简单的解决方案是将每个滑块/数字框的
valueChanged
连接到同步值的插槽更好的解决方案是定义一个在内部处理所有事情的自定义滑块类。这样,您只需处理一次同步。在
^{pr2}$编辑:对于Ekhurvo的评论,可以简化为
您可能还想模拟一些
QSlider
方法来更改范围和值。注意,我们不需要显式地在self.numbox
上设置任何内容,因为上面的信号/插槽连接会处理它。在相关问题 更多 >
编程相关推荐