简体   繁体   English

PyQt5 滚动失败并带有水平滑块

[英]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.尝试滚动 MainWindow,然后有时滚动停止,而不是 window 滚动 QSlider 减少了。

How can I fix it?我该如何解决?

The QSliders are receiving the wheelEvent when the scrolling occurs while hovering over them.当 QSlider 悬停在它们上时发生滚动时,它们正在接收wheelEvent You can invoke QWheelEvent.ignore() for each QSlider so the event will propagate to the parent to handle the scrolling.您可以为每个 QSlider 调用QWheelEvent.ignore()以便事件将传播到父级以处理滚动。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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