pyqt5, Receiving AttributeError: у объекта 'QMainWindow' нет атрибута 'browseSlot'

1

Я изучаю pyqt5 и, в частности, как использовать его с QT Designer. Я как-то слежу за туртоном ЗДЕСЬ. Однако в этом руководстве они преобразуют XML-интерфейс в код Python с pyuic5, в то время как я пытаюсь импортировать его динамически с помощью uic.loadUi("myui.ui"). В учебнике мы определяем слот с сигналами и слот-редактором с именем "browseSlot". Когда я пытаюсь запустить/скомпилировать, на линии

dlg = uic.loadUi("myui.ui")

Я получаю сообщение об ошибке:

AttributeError: объект "QMainWindow" не имеет атрибута "browseSlot"

Я думаю, что происходит то, что QT Designer связывает сигнал с слотом "browseSlot", но поскольку метод "browseSlot" не определен в myui.ui, возникает ошибка, потому что интерпретатор не знает Я имею в виду метод, который находится вне файла интерфейса интерфейса. (В этом случае в модуле, который загружает интерфейс). Насколько я могу судить, QT Designer позволяет мне подключать сигналы к слотам, а не определять совершенно новый. Я думаю, что таким образом это обрабатывается в других рамках, так это то, что будет абстрактный метод, который нуждается в верховой езде. Так что я могу сделать в этой ситуации, чтобы заставить его работать?

from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtCore import QObject, pyqtSlot
import sys

app = QtWidgets.QApplication([])
dlg = uic.loadUi("myui.ui")

@pyqtSlot
def returnPressedSlot():
    pass
@pyqtSlot
def writeDocSlot():
    pass
@pyQt
def browseSlot():
    pass

dlg.show()
sys.exit(app.exec())
Теги:
pyqt5
pyqt

1 ответ

0
Лучший ответ

Слоты принадлежат классу, который используется, возвращает loadUi(), они не являются никакими функциями, так как они не магически не соединяют их, если вы хотите использовать loadUi() и реализовать эти методы, которые вы должны наследовать от класса, соответствующего шаблону который вы использовали, в примере основного окна ссылки было использовано так, чтобы оно было унаследовано от QMainWindow:

from PyQt5 import QtCore, QtGui, QtWidgets, uic


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi("mainwindow.ui", self)

    @QtCore.pyqtSlot()
    def returnPressedSlot():
        pass

    @QtCore.pyqtSlot()
    def writeDocSlot():
        pass

    @QtCore.pyqtSlot()
    def browseSlot():
        pass


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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню