我在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_())