Не удается открыть окно класса GUI с указанными параметрами - PullRequest
0 голосов
/ 10 мая 2018

Я новичок в python и pyqt. Я пытаюсь открыть новое окно после первого экрана. Мое второе окно открывается, но без указанных мной параметров, метки и кнопки.

from PyQt5 import QtWidgets
import sys

class secondwindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(secondwindow, self).__init__()
        self.label1 = QtWidgets.QLabel("Second Window");
        self.button1 = QtWidgets.QPushButton("Click Me");
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.label1)
        hbox.addWidget(self.button1)
        self.setLayout(hbox)

class Window(QtWidgets.QWidget):
    def btnclicked(self):
        sender = self.sender()
        if sender.text() == "OK":
            self.secwin.show()

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.button1 = QtWidgets.QPushButton("OK");
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.button1)
        self.setLayout(vbox)

        self.button1.clicked.connect(self.btnclicked)
        self.secwin = secondwindow()
        self.show()

def main():
    app = QtWidgets.QApplication(sys.argv)
    main = Window()
    main.show
    sys.exit(app.exec())

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 10 мая 2018

QMainWindow - это специальный виджет, поскольку он имеет определенную структуру, http://doc.qt.io/qt-5/qmainwindow.html#qt-main-window-framework:

enter image description here

Как показано на рисунке, уже есть область, предназначенная для размещения виджетов, которая называется Central Widget, в ней вы должны разместить виджеты, которые вы хотите для нее отображать, вы используете setCentralWidget().

В вашем случае решение:

class secondwindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(secondwindow, self).__init__()
        central_widget = QtWidgets.QWidget()
        self.label1 = QtWidgets.QLabel("Second Window")
        self.button1 = QtWidgets.QPushButton("Click Me")
        hbox = QtWidgets.QHBoxLayout(central_widget)
        hbox.addWidget(self.label1)
        hbox.addWidget(self.button1)
        self.setCentralWidget(central_widget)
...