現在、このカスタム回転ウィジェットを使用して、ダイヤル ハンドルがデフォルト値QDial()
の位置ではなく上向きになっています。0
180
目盛りの間隔を変更するには、setNotchTarget()
を使用してノッチの間隔を空けますが、これにより目盛りが均等に分散されます (左)。調整可能な目盛りが3 つだけのカスタム ダイヤルを作成したい(右)。
中心の目盛りは決して移動せず、常に北の位置0
. ただし、他の 2 つの目盛りは調整可能で、等間隔にする必要があります。たとえば、目盛りが に設定されている場合、70
左右の目盛り35
単位が中心から配置されます。同様に、目盛りが に変更された場合、目盛りの120
間隔は になります60
。
これどうやってするの?を使用してこれが不可能な場合QDial()
、他のどのウィジェットでこれを行うことができますか? PyQt4 と Python 3.7 を使用しています
import sys
from PyQt4 import QtGui, QtCore
class Dial(QtGui.QWidget):
def __init__(self, rotation=0, parent=None):
QtGui.QWidget.__init__(self, parent)
self.dial = QtGui.QDial()
self.dial.setMinimumHeight(160)
self.dial.setNotchesVisible(True)
# self.dial.setNotchTarget(90)
self.dial.setMaximum(360)
self.dial.setWrapping(True)
self.label = QtGui.QLabel('0')
self.dial.valueChanged.connect(self.label.setNum)
self.view = QtGui.QGraphicsView(self)
self.scene = QtGui.QGraphicsScene(self)
self.view.setScene(self.scene)
self.graphics_item = self.scene.addWidget(self.dial)
self.graphics_item.rotate(rotation)
# Make the QGraphicsView invisible
self.view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.view.setFixedHeight(self.dial.height())
self.view.setFixedWidth(self.dial.width())
self.view.setStyleSheet("border: 0px")
self.layout = QtGui.QVBoxLayout()
self.layout.addWidget(self.view)
self.layout.addWidget(self.label)
self.setLayout(self.layout)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dialexample = Dial(rotation=180)
dialexample.show()
sys.exit(app.exec_())