Python: QSlider ändert seinen Wert unlogisch

Alles rund um die Programmierung mit Qt
Antworten
Atalanttore
Beiträge: 4
Registriert: 29. Mai 2012 17:56

Python: QSlider ändert seinen Wert unlogisch

Beitrag von Atalanttore » 2. November 2018 17:29

Hallo

Ich habe mit PySide2 und dem QSlider eine kleine Beispielanwendung in Python erstellt.

sliderwindow.ui:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>SliderWindow</class>
 <widget class="QMainWindow" name="SliderWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QWidget" name="layoutWidget">
    <property name="geometry">
     <rect>
      <x>40</x>
      <y>40</y>
      <width>721</width>
      <height>51</height>
     </rect>
    </property>
    <layout class="QGridLayout" name="gridLayout">
     <item row="0" column="0">
      <widget class="QLabel" name="label_value">
       <property name="minimumSize">
        <size>
         <width>50</width>
         <height>20</height>
        </size>
       </property>
       <property name="text">
        <string/>
       </property>
      </widget>
     </item>
     <item row="0" column="1">
      <widget class="QSlider" name="horizontalSlider">
       <property name="minimum">
        <number>0</number>
       </property>
       <property name="maximum">
        <number>100</number>
       </property>
       <property name="sliderPosition">
        <number>50</number>
       </property>
       <property name="orientation">
        <enum>Qt::Horizontal</enum>
       </property>
      </widget>
     </item>
    </layout>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>28</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

sliderwindow.py:

Code: Alles auswählen

import sys
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QDialog
from PySide2.QtCore import QFile


class SliderWindow(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.init_window()

    def init_window(self):
        self.file = QFile("sliderwindow.ui")
        self.file.open(QFile.ReadOnly)

        self.loader = QUiLoader()
        self.window = self.loader.load(self.file)
        self.window.show()

        self.window.horizontalSlider.sliderMoved.connect(self.write_slider_value)

    def write_slider_value(self):
        self.slider_value = self.window.horizontalSlider.value()
        self.window.label_value.setText(str(self.slider_value))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    sliderwindow = SliderWindow()

    sys.exit(app.exec_())
Das Beispiel funktioniert auch soweit. Allerdings habe ich herausgefunden, dass der Wert erst auf 0 geht, wenn man den Slider vollständig nach links schiebt (Slider steht auf Wert 1) und anschließend mit gedrückter Maustaste langsam nach rechts fährt. Für den Wert 100 verhält es sich genau anders herum. Was geht da vor sich?

Gruß
Atalanttore

Antworten