2017-02-09 4 views
0

kann nicht arbeiten, wie ein Fenster in einem Hauptfenster einzubetten Klassen:anzeigen Unterfenster in Hauptfenster

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 

""" 
Qt4 tutorial using classes 

This example will be built 
on over time. 
""" 

import sys 
from PyQt4 import QtGui, QtCore 

class Form(QtGui.QWidget): 

    def __init__(self, MainWindow): 
     super(Form, self).__init__() 


class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__() 
     self.setGeometry(50, 50, 1600, 900) 
     new_window = Form(self) 
     self.show() 


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

if __name__ == "__main__": 
    main() 

Dies soll das einzige grundlegendste Stück Code-Klassen sein. Wie bekomme ich das zweite Fenster zu zeigen bitte.

+0

Was meinst du mit Fenster? Ein Popup-Fenster oder ein Widget in der Haupt-GUI? – alexblae

+0

Entschuldigung, ich versuche, eine Box auf dem Hauptfenster zu bekommen. Es ist in der Klasse Form, aber ich kann es nicht bekommen, nur zu zeigen, ich kann einen Knopf auf das Hauptfenster setzen und es auftauchen, aber ich will das eingebettet. – iFunction

+0

Die 'Form' hat kein Elternteil, Sie haben es nicht in ein Layout eingefügt, und Sie haben es nicht angezeigt(). – ekhumoro

Antwort

1

Wie bereits erwähnt, muss Ihr Widget ein Kind Ihres Hauptfensters sein. Allerdings glaube ich nicht, dass Sie show für das Widget aufrufen müssen, da es sowieso aufgerufen wird, sobald sein Eltern (MainWindow) show ruft. Wie mata richtig hingewiesen, ist die richtige Art, eine Widget zu einer MainWindow Instanz hinzuzufügen, setCentralWidget zu verwenden. Hier ein Arbeitsbeispiel zur Verdeutlichung:

import sys 
from PyQt4 import QtGui, QtCore 

class Form(QtGui.QWidget): 

    def __init__(self, parent): 
     super(Form, self).__init__(parent) 
     self.lbl = QtGui.QLabel("Test", self) 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 

     super(MainWindow, self).__init__() 
     self.setGeometry(50, 50, 1600, 900) 
     new_window = Form(self) 
     self.setCentralWidget(new_window) 
     self.show() 

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

if __name__ == "__main__": 
    main() 
+0

Nein, das ist nicht der richtige Weg, ein QMainWindow zu verwenden, um Inhalt hinzuzufügen, sollte seine [setCentralWidget() '] (http://doc.qt.io/qt-5/qmainwindow.html#setCentralWidget) Methode sein benutzt. – mata

+0

Sie haben recht, ich war mir nicht sicher, ob [iFunction] (http://stackoverflow.com/users/6500048/ifunction) "Form" als "centralWidget" bezeichnen soll. – alexblae

+0

@alexblae. Was ich meinte, war, dass du mindestens eins der Dinge tun musst, die ich erwähnt habe, um das Widget sichtbar zu machen. Wenn Sie das Widget als zentrales Widget festlegen, entspricht dies genau dem Hinzufügen zu einem Layout. In diesem Fall ist es nicht erforderlich, ein übergeordnetes Element explizit festzulegen (da es automatisch neu parent wird). – ekhumoro

Verwandte Themen