PyQT4 WheelEvent?как определить, использовалось ли колесо? - PullRequest
1 голос
/ 28 февраля 2012

я пытаюсь выяснить в PyQT, как я могу установить событие Mousewheel? мне нужно, чтобы я мог прикрепить его к области Qscroll

код, который я использую, работает нормально. но размер жестко закодирован. Мне нужно, чтобы он каким-то образом динамически регулировался в зависимости от того, как используется колесо (на мыши), например, когда я сдвигаю колесо мыши вверх. высота моего кадра увеличивается (например, 50 пикселей за тик) и наоборот.

    self.scrollArea = QtGui.QScrollArea()
    #set the parent of scrollArea on the frame object of the computers
    self.scrollArea.setWidget(self.ui.Main_Body)
    self.scrollArea.setWidgetResizable(True)

    #add the verticalLayout a object on PYQT Designer (vlayout is the name)
    #drag the frame object of the computers inside the verticalLayout
    #adjust the size of the verticalLayout inside the size of the  frame

    #add the scrollArea sa verticalLayout
    self.ui.verticalLayout.addWidget(self.scrollArea)
    self.ui.Main_Body.setMinimumSize(400, 14000)

последняя часть - это то, что я хочу улучшить. я не хочу, чтобы это было жестко закодировано в значение 14000. спасибо всем, кто поможет. и я надеюсь, что данный пример кода также может помочь другим нуждающимся.

)

1 Ответ

2 голосов
/ 29 февраля 2012

Я могу быть немного смущен вашим вопросом, но вот пример того, как получить доступ к событиям колеса, которые изменяют размер вашего окна. Если вы используете QScrollArea, я не знаю, почему вы захотите это сделать.

from PyQt4.QtGui import *
from PyQt4.QtCore import *

import sys


class Main(QWidget):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)

        layout = QHBoxLayout(self)
        layout.addWidget(Scroll(self))


class Scroll(QScrollArea):

    def __init__(self, parent=None):
        super(Scroll, self).__init__(parent)
        self.parent = parent

    def wheelEvent(self, event):
        super(Scroll, self).wheelEvent(event)
        print "wheelEvent", event.delta()

        newHeight = self.parent.geometry().height() - event.delta()
        width     = self.parent.geometry().width()
        self.parent.resize(width, newHeight)

app = QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())

Если вы посмотрите документацию для QScrollArea , вы увидите строку, унаследованную от класса QWidget, который имеет функцию с именем wheelEvent. Вы можете вставить это и перезаписать унаследованную функцию.

...