2017-11-26 9 views
2

私はPyQt4を初めて使っています。私はQSliderを使ってguiを作っています。Python PyQt4スライダ(目盛りラベル付き)

デフォルトでは、QSliderはあなたのティックの値を表示しません。私は検索し、それを行う簡単な方法を見つけられなかったので、それは可能ですか、それをマニュアルにしなければなりませんか?

+0

私は1から10までの範囲の値を持つことを意味します。それはティックの下に表示されたいので、私は簡単に値を選ぶことができます –

答えて

0

悲しいことに、これを行う簡単な方法はありません。手動で作成する必要があります。私もそれをやらなければなりませんでしたので、私の実装をすることができます。私が必要なものだけを再実装したことを考慮に入れて、ちょっとしたアラインメントをハッキングし、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) 
関連する問題