PyQt соответствующая функция для кнопки «Назад» для предыдущего кадра GUI - PullRequest
0 голосов
/ 24 сентября 2018

Я использую PyQt для разработки графического интерфейса.Как и большинство графических интерфейсов, он имеет кнопки «Вперед» и «Назад» для следующего и предыдущего фреймов.Каждый кадр определен в отдельном классе.Дело в том, что для функции кнопки «Далее» вы можете импортировать следующий класс фрейма в текущий класс, а затем show() его.Но для «назад» мы получаем ошибку при попытке импортировать обратно предыдущий класс.Может ли кто-нибудь дать какой-нибудь намек на логику, чтобы создать соответствующую функцию для кнопки «Назад».

Класс для первого кадра:

from GUI2 import secondwindow

class firstwindow(object):
    def nextWindow(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = secondwindow()
        self.ui.setupUi(self.window)
        app.closeAllWindows()
        self.window.show()

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(622, 471)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(210, 140, 191, 41))
        self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.nextWindow)
.....
.....
.....

второй кадр:

class secondwindow(object):
    def previousWindow(self):
        XXX
        XXX

    def setupUi(self, Dialog):

        Dialog.setObjectName("Dialog")
        Dialog.resize(1200, 650)
        Dialog.setMinimumSize(QtCore.QSize(552, 0))

        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(480, 240, 70, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.previouswindow)
...
...
...

1 Ответ

0 голосов
/ 24 сентября 2018

Прежде всего, классы, которые предлагает Qt Designer, не являются виджетами, и рекомендуется, чтобы при изменении .ui при перекомпиляции вы потеряли модификации логики.Поэтому для двух предыдущих аргументов я рекомендую вам восстановить оба файла.

ui_firstwindow.py

class ui_Firstwindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(622, 471)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(210, 140, 191, 41))
        self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.nextWindow)

ui_secondwindow.py

class ui_Secondwindow(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(1200, 650)
        Dialog.setMinimumSize(QtCore.QSize(552, 0))

        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(480, 240, 70, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.previouswindow)

Ваша проблема в том, что для отображения окна вам необходим доступ к объекту окна, но в вашем случае, если вы хотите сделать это в нескольких файлах, у вас могут возникнуть проблемы с циклическим импортом, неопределенными переменными и т. Д. Правильная вещьзаключается в том, что все окна имеют одинаковую область видимости.

Затем мы создадим файл main.py, в котором мы будем реализовывать классы, реализующие виджеты, используя предыдущий дизайн.Мы создаем класс, в котором будут создаваться окна, и будем связывать сигналы с нажатой кнопкой мыши с методом show() другого окна.В каждом классе сигнал нажатия кнопки связан с методом hide() окна.

from PyQt5 import QtWidgets

from ui_firstwindow import ui_Firstwindow
from ui_secondwindow import ui_Secondwindow


class Firstwindow(QtWidgets.QMainWindow, ui_Firstwindow):
    def __init__(self, parent=None):
        super(Firstwindow, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.hide)


class Secondwindow(QtWidgets.QDialog, ui_Secondwindow):
    def __init__(self, parent=None):
        super(Secondwindow, self).__init__(parent)
        self.setupUi(self)
        self.pushButton_2.clicked.connect(self.hide)


class Manager:
    def __init__(self):
        self.first = Firstwindow()
        self.second = Secondwindow()

        self.first.pushButton.clicked.connect(self.second.show)
        self.second.pushButton_2.clicked.connect(self.first.show)

        self.first.show()


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    manager = Manager()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...