我在Windows上使用带有Python 2.7的PyQt4,并且对于音乐播放器,我决定将Phonon.SeekSlider替换为QDial
我的问题是,QDial的最小值始终位于刻度盘的底部,但我希望它位于顶部(值仍沿顺时针方向增加)。我尝试了setInvertedAppearance()setInvertedControls(),但这只是将拨盘水平翻转,而setOrientation()也没有帮助。
我的问题:有什么方法可以指定角度以在表盘上定位最小值,还是垂直翻转整个表盘?

最佳答案

我不认为有直接方法可以做到这一点。但是,您可以将QDial放在QGraphicsView中,并将其作为场景中的一个项目旋转。这样的事情应该起作用:

import sys
from PyQt4 import QtGui, QtCore

class RotatableView(QtGui.QGraphicsView):
    def __init__(self, item, rotation=0):
        QtGui.QGraphicsView.__init__(self)
        scene = QtGui.QGraphicsScene(self)
        self.setScene(scene)
        graphics_item = scene.addWidget(item)
        graphics_item.rotate(rotation)

        # make the QGraphicsView invisible
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setFixedHeight(item.height())
        self.setFixedWidth(item.width())
        self.setStyleSheet("border: 0px")

class DialExample(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        dial = QtGui.QDial()
        dial.setNotchesVisible(True)
        label = QtGui.QLabel('0')
        dial.valueChanged.connect(label.setNum)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(RotatableView(dial, 180))
        layout.addWidget(label)
        self.setLayout(layout)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dialexample = DialExample()
    dialexample.show()
    sys.exit(app.exec_())

10-07 23:12