iFunction
iFunction

Reputation: 1268

PyQt using classes to show button

Getting very stuck here, I am trying to learn how to use classes, and so simply want to show a button on a window when the button is in a different class. Here is the code I am trying to use:

#!/usr/bin/python3

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QDialog):

    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setGeometry(0, 0, 800, 600)
        main_menu = Menu()

        self.show()

class Menu(QtGui.QWidget):

    def __init__(self):
        btn = QtGui.QPushButton("Quit")
        btn.resize(btn.sizeHint())
        btn.move(100,100) 
        btn.show()
        print("Hello I am a menu")




def main():
    app = QtGui.QApplication(sys.argv)
    main_window = Window()

    sys.exit(app.exec())


if __name__ == "__main__":
    main()

This works so far as I get a window, but no button on it, howerver the print message I put in works. What am I doing wrong please?

Upvotes: 0

Views: 873

Answers (1)

eyllanesc
eyllanesc

Reputation: 244252

You must initialize the parent class in Menu, in addition to passing the parent to that class and the button.

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setGeometry(0, 0, 800, 600)
        main_menu = Menu(self)
        self.show()

class Menu(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        btn = QtGui.QPushButton("Quit", self)
        btn.resize(btn.sizeHint())
        btn.move(100,100) 
        print("Hello I am a menu")

def main():
    app = QtGui.QApplication(sys.argv)
    main_window = Window()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

enter image description here

Upvotes: 1

Related Questions