PyQt: второе окно не отображается при нажатии кнопки - PullRequest
0 голосов
/ 30 января 2019

Попытка сделать мое первое приложение PyQt5, и когда я нажимаю кнопку, код запускается, но мое окно параметров не появляется на экране.

#!/usr/bin/env python3

import sys

from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication, QLabel, QPushButton, QVBoxLayout
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtCore import QSize


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

    def initUI(self):               
        self.setWindowTitle('Main Window')
        label = QLabel(self)
        pixmap = QPixmap('background.png')
        label.setPixmap(pixmap)

        self.resize(pixmap.width(), pixmap.height())
        self.initButtons()
        self.center()
        self.show()

    def initButtons(self):
        self.button = QPushButton('', self)
        # button style things...
        self.button.clicked.connect(self.handleButton)
        self.dialog = OptionsWindow(self)

    def handleButton(self):
        self.dialog.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


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

        self.setWindowTitle("Options")
        self.resize(200,200)
        self.center()
        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


def main():
    app = QApplication(sys.argv)
    main = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

Я что-то упустил?Я пробовал разные вещи, такие как удаление «центральной» функциональности, удаление фонового изображения и т. Д., Но по-прежнему не появляется второе окно при нажатии кнопки

1 Ответ

0 голосов
/ 30 января 2019

Попробуйте:

import sys
from PyQt5.QtWidgets import (QWidget, QDesktopWidget, QApplication, 
                             QLabel, QPushButton, QVBoxLayout)
from PyQt5.QtGui     import QPixmap, QIcon
from PyQt5.QtCore    import QSize


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

    def initUI(self):               
        self.setWindowTitle('Main Window')
        label  = QLabel(self)
        pixmap = QPixmap('D:/_Qt/img/pyqt.jpg')
        label.setPixmap(pixmap)

        self.resize(pixmap.width(), pixmap.height())
        self.initButtons()
        self.center()
        self.show()

    def initButtons(self):
        self.button = QPushButton('button', self)
        # button style things...
        self.button.clicked.connect(self.handleButton)
#        self.dialog = OptionsWindow(self)                 # ---

    def handleButton(self):
        self.dialog = OptionsWindow()                      # +++ - self
        self.dialog.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


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

        self.setWindowTitle("Options")
        self.resize(200,200)
        self.center()
#        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


def main():
    app = QApplication(sys.argv)
    main = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

enter image description here

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