3

現在、このカスタム回転ウィジェットを使用して、ダイヤル ハンドルがデフォルト値QDial()の位置ではなく上向きになっています。0180

目盛りの間隔を変更するには、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_())
4

1 に答える 1