gravytrain
gravytrain

Reputation: 73

PyQt: second window not showing on button press

Trying to make my first PyQt5 application and when I click my button, the code runs but my options window doesn't appear on the screen.

#!/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()

Am I missing something? I've tried various things like removing the 'center' functionality, removing the background image, etc. but still get no second window on button press

Upvotes: 0

Views: 719

Answers (1)

S. Nick
S. Nick

Reputation: 13641

Try it:

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

Upvotes: 1

Related Questions