Hackyday 给出一个QgraphicsView 的答案,这里我给你一个pyqt 的解决方案,不使用QgraphicsView。
你可以直接在 python 上使用 if/else 声明。
你创建了你的qDial,我想你想要一个表盘作为指南针(0 - 360°),我想你在qSpinBox上写了qDial的输出):
<widget class="QDial" name="dial">
<property name="geometry">
<rect>
<x>20</x>
<y>150</y>
<width>101</width>
<height>111</height>
</rect>
</property>
<property name="mouseTracking">
<bool>false</bool>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>360</number>
</property>
<property name="singleStep">
<number>0</number>
</property>
<property name="pageStep">
<number>0</number>
</property>
<property name="value">
<number>135</number>
</property>
<property name="sliderPosition">
<number>135</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="notchesVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QSpinBox" name="oAzimuth">
<property name="geometry">
<rect>
<x>10</x>
<y>110</y>
<width>52</width>
<height>30</height>
</rect>
</property>
<property name="maximum">
<number>360</number>
</property>
<property name="value">
<number>315</number>
</property>
</widget>
如果您想将滑块的默认位置设置为 315°,请按照我的示例将其设置为 135°。为什么 ?因为 0° 和 180° 之间的所有度数都必须转换为 +180°,而 181° 和 360° 之间的度数必须转换为 -180°。
所以在pyqt 上,在你的file.py 上,你可以编写if/else 语句以在function 内自动更正:
def Edit_Slider(self):
if self.dockwidget.spinbox.value() > 180:
self.dockwidget.dial.setValue(self.dockwidget.spinbox.value()-180)
else:
self.dockwidget.dial.setValue(self.dockwidget.spinbox.value()+180)
def Edit_Spinbox(self):
if self.dockwidget.dial.value() > 180:
self.dockwidget.spinbox.setValue(self.dockwidget.dial.value()-180)
else:
self.dockwidget.spinbox.setValue(self.dockwidget.dial.value()+180)
并在您移动滑块或 SpinValue 时自动编辑此更改:
self.dockwidget.spinbox.valueChanged.connect(self.Edit_Slider)
self.dockwidget.dial.valueChanged.connect(self.Edit_Spinbox)