установитьEventFilter в PyQt5 - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь реализовать событие в PyQT5, но я получаю эту ошибку:

TypeError: installEventFilter(self, QObject): argument 1 has unexpected type 'MainWindow_EXEC'

Это мой код

import sys
from time import sleep
from PyQt5 import QtCore, QtWidgets
from view_cortes2 import Ui_cortes2enter

class MainWindow_EXEC():
def __init__(self):
    app = QtWidgets.QApplication(sys.argv)
    cortes2 = QtWidgets.QMainWindow()
    self.ui = Ui_cortes2()
    self.ui.setupUi(cortes2)
    self.flag = 0
    self.ui.ledit_corteA.installEventFilter(self)
    self.ui.ledit_corteB.installEventFilter(self)
    self.ui.buttonGroup.buttonClicked.connect(self.handleButtons)
    cortes2.show()
    sys.exit(app.exec_())

def eventFilter(self, source, event):
    if (event.type() == QtCore.QEvent.FocusIn and source is self.ui.ledit_corteA):
        print("A")
        self.flag = 0
    if (event.type() == QtCore.QEvent.FocusIn and source is self.ui.ledit_corteA):
        print("B")
        self.flag = 1
    return super(cortes2, self).eventFilter(source, event)

if __name__ == "__main__":
    MainWindow_EXEC()

Событие, которое я пытаюсьadd - это когда я фокусируюсь в TextEdit, он меняет значение флага.Если я изменю

self.ui.ledit_corteA.installEventFilter(self)

на

self.ui.ledit_corteA.installEventFilter(cortes2)

, я работаю, но никогда не изменяю значение моего флага.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 июня 2018

installEventFilter ожидает QObject, а в вашем случае MainWindow_EXEC - нет.

Если вы используете дизайн Qt Designer, рекомендуется создать новый класс, который наследуется от соответствующего виджетаи используйте класс, предоставленный Qt Designer, чтобы заполнить его, как показано ниже:

import sys
from PyQt5 import QtCore, QtWidgets
from view_cortes2 import Ui_cortes2

class MainWindow(QtWidgets.QMainWindow, Ui_cortes2):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.flag = 0
        self.ledit_corteA.installEventFilter(self)
        self.ledit_corteB.installEventFilter(self)
        #self.buttonGroup.buttonClicked.connect(self.handleButtons)

    def eventFilter(self, source, event):
        if event.type() == QtCore.QEvent.FocusIn and source is self.ledit_corteA:
            print("A")
            self.flag = 0
        if event.type() == QtCore.QEvent.FocusIn and source is self.ledit_corteB:
            print("B")
            self.flag = 1
        return super(MainWindow, self).eventFilter(source, event)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...