2
私はPyQt4を初めて使っています。私はQSliderを使ってguiを作っています。Python PyQt4スライダ(目盛りラベル付き)
デフォルトでは、QSliderはあなたのティックの値を表示しません。私は検索し、それを行う簡単な方法を見つけられなかったので、それは可能ですか、それをマニュアルにしなければなりませんか?
私はPyQt4を初めて使っています。私はQSliderを使ってguiを作っています。Python PyQt4スライダ(目盛りラベル付き)
デフォルトでは、QSliderはあなたのティックの値を表示しません。私は検索し、それを行う簡単な方法を見つけられなかったので、それは可能ですか、それをマニュアルにしなければなりませんか?
悲しいことに、これを行う簡単な方法はありません。手動で作成する必要があります。私もそれをやらなければなりませんでしたので、私の実装をすることができます。私が必要なものだけを再実装したことを考慮に入れて、ちょっとしたアラインメントをハッキングし、valueChanged()APIは非常に異なる動作を示します。
from PyQt4 import QtCore
from PyQt4.QtGui import QSlider, QWidget, QVBoxLayout, QHBoxLayout, QLabel
__author__ = 'Andres'
class QCustomSlider(QWidget):
def __init__(self, sliderOrientation=None):
super(QCustomSlider, self).__init__()
self._slider = QSlider(sliderOrientation)
self.setLayout(QVBoxLayout())
self._labelTicksWidget = QWidget(self)
self._labelTicksWidget.setLayout(QHBoxLayout())
self._labelTicksWidget.layout().setContentsMargins(0, 0, 0, 0)
self.layout().addWidget(self._slider)
self.layout().addWidget(self._labelTicksWidget)
def setTickLabels(self, listWithLabels):
lengthOfList = len(listWithLabels)
for index, label in enumerate(listWithLabels):
label = QLabel(str(label))
label.setContentsMargins(0, 0, 0, 0)
if index > lengthOfList/3:
label.setAlignment(QtCore.Qt.AlignCenter)
if index > 2*lengthOfList/3:
label.setAlignment(QtCore.Qt.AlignRight)
self._labelTicksWidget.layout().addWidget(label)
def setRange(self, mini, maxi):
self._slider.setRange(mini, maxi)
def setPageStep(self, value):
self._slider.setPageStep(value)
def setTickInterval(self, value):
self._slider.setTickInterval(value)
def setTickPosition(self, position):
self._slider.setTickPosition(position)
def setValue(self, value):
self._slider.setValue(value)
def onValueChangedCall(self, function):
self._slider.valueChanged.connect(function)
私は1から10までの範囲の値を持つことを意味します。それはティックの下に表示されたいので、私は簡単に値を選ぶことができます –