简体   繁体   中英

PyQt5 scroll fails with Horizontal Sliders

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'scroll_error.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 109)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 763, 516))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.horizontalSlider = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider.setSliderPosition(50)
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.gridLayout_2.addWidget(self.horizontalSlider, 0, 0, 1, 1)
        self.horizontalSlider_2 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_2.setSliderPosition(50)
        self.horizontalSlider_2.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_2.setObjectName("horizontalSlider_2")
        self.gridLayout_2.addWidget(self.horizontalSlider_2, 1, 0, 1, 1)
        self.horizontalSlider_3 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_3.setSliderPosition(50)
        self.horizontalSlider_3.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_3.setObjectName("horizontalSlider_3")
        self.gridLayout_2.addWidget(self.horizontalSlider_3, 2, 0, 1, 1)
        self.horizontalSlider_4 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_4.setSliderPosition(50)
        self.horizontalSlider_4.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_4.setObjectName("horizontalSlider_4")
        self.gridLayout_2.addWidget(self.horizontalSlider_4, 3, 0, 1, 1)
        self.horizontalSlider_5 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_5.setSliderPosition(50)
        self.horizontalSlider_5.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_5.setObjectName("horizontalSlider_5")
        self.gridLayout_2.addWidget(self.horizontalSlider_5, 4, 0, 1, 1)
        self.horizontalSlider_6 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_6.setSliderPosition(50)
        self.horizontalSlider_6.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_6.setObjectName("horizontalSlider_6")
        self.gridLayout_2.addWidget(self.horizontalSlider_6, 5, 0, 1, 1)
        self.horizontalSlider_8 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_8.setSliderPosition(50)
        self.horizontalSlider_8.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_8.setObjectName("horizontalSlider_8")
        self.gridLayout_2.addWidget(self.horizontalSlider_8, 6, 0, 1, 1)
        self.horizontalSlider_11 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_11.setSliderPosition(50)
        self.horizontalSlider_11.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_11.setObjectName("horizontalSlider_11")
        self.gridLayout_2.addWidget(self.horizontalSlider_11, 7, 0, 1, 1)
        self.horizontalSlider_10 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_10.setSliderPosition(50)
        self.horizontalSlider_10.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_10.setObjectName("horizontalSlider_10")
        self.gridLayout_2.addWidget(self.horizontalSlider_10, 8, 0, 1, 1)
        self.horizontalSlider_9 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_9.setSliderPosition(50)
        self.horizontalSlider_9.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_9.setObjectName("horizontalSlider_9")
        self.gridLayout_2.addWidget(self.horizontalSlider_9, 9, 0, 1, 1)
        self.horizontalSlider_12 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_12.setSliderPosition(50)
        self.horizontalSlider_12.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_12.setObjectName("horizontalSlider_12")
        self.gridLayout_2.addWidget(self.horizontalSlider_12, 10, 0, 1, 1)
        self.horizontalSlider_7 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_7.setSliderPosition(50)
        self.horizontalSlider_7.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_7.setObjectName("horizontalSlider_7")
        self.gridLayout_2.addWidget(self.horizontalSlider_7, 11, 0, 1, 1)
        self.horizontalSlider_14 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_14.setSliderPosition(50)
        self.horizontalSlider_14.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_14.setObjectName("horizontalSlider_14")
        self.gridLayout_2.addWidget(self.horizontalSlider_14, 12, 0, 1, 1)
        self.horizontalSlider_17 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_17.setSliderPosition(50)
        self.horizontalSlider_17.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_17.setObjectName("horizontalSlider_17")
        self.gridLayout_2.addWidget(self.horizontalSlider_17, 13, 0, 1, 1)
        self.horizontalSlider_16 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_16.setSliderPosition(50)
        self.horizontalSlider_16.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_16.setObjectName("horizontalSlider_16")
        self.gridLayout_2.addWidget(self.horizontalSlider_16, 14, 0, 1, 1)
        self.horizontalSlider_15 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_15.setSliderPosition(50)
        self.horizontalSlider_15.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_15.setObjectName("horizontalSlider_15")
        self.gridLayout_2.addWidget(self.horizontalSlider_15, 15, 0, 1, 1)
        self.horizontalSlider_18 = QtWidgets.QSlider(self.scrollAreaWidgetContents)
        self.horizontalSlider_18.setSliderPosition(50)
        self.horizontalSlider_18.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_18.setObjectName("horizontalSlider_18")
        self.gridLayout_2.addWidget(self.horizontalSlider_18, 16, 0, 1, 1)
        self.horizontalSlider_13 = QtWidgets.QSlider(self.scrollAreaWidgetContents)




        self.horizontalSlider_13.setSliderPosition(50)
        self.horizontalSlider_13.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider_13.setObjectName("horizontalSlider_13")
        self.gridLayout_2.addWidget(self.horizontalSlider_13, 17, 0, 1, 1)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Try to scroll the MainWindow, then some times the scrolls stop and instead of window scrolling QSlider decreased is hapenned.

How can I fix it?

The QSliders are receiving the wheelEvent when the scrolling occurs while hovering over them. You can invoke QWheelEvent.ignore() for each QSlider so the event will propagate to the parent to handle the scrolling.

for slider in MainWindow.findChildren(QtWidgets.QSlider):
    slider.wheelEvent = lambda event: event.ignore()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM