2010-05-01 10 views
1

Je suis en train de faire une classe qui étend QWidget, qui apparaît dans une nouvelle fenêtre, je dois manquer quelque chose de fondamental,Faire QWidget dans une nouvelle fenêtre dans PyQt4

class NewQuery(QtGui.QWidget): 
def __init__(self, parent): 
    QtGui.QMainWindow.__init__(self,parent) 
    self.setWindowTitle('Add New Query') 
    grid = QtGui.QGridLayout() 
    label = QtGui.QLabel('blah') 
    grid.addWidget(label,0,0) 
    self.setLayout(grid) 
    self.resize(300,200) 

quand une nouvelle instance de c'est fait dans la classe de la fenêtre principale, et show() appelé, le contenu est superposé sur la fenêtre principale, comment puis-je le faire afficher dans une nouvelle fenêtre?

Répondre

1

Votre superclasse initialiseur est mauvaise, vous avez probablement voulu dire:

class NewQuery(QtGui.QWidget): 
    def __init__(self, parent): 
     QtGui.QWidget.__init__(self, parent) 

(une raison d'utiliser super):

class NewQuery(QtGui.QWidget): 
    def __init__(self, parent): 
     super(NewQuery, self).__init__(parent) 

Mais peut-être que vous voulez hériter de QtGui.QDialog à la place (qui pourrait être approprié - difficile de dire avec le contexte actuel).

Notez également que l'indentation dans votre exemple de code est incorrecte (un seul espace fonctionnera mais 4 espaces ou un seul onglet sont considérés comme plus agréables).

+0

Oui, QDialog est ce que je avais besoin, je vous remercie. L'espace unique doit avoir été un problème avec la copie du code, j'ai des onglets dans le code :) – matt

2

suivre les conseils que @ChristopheD vous a donné et essayer cette place

from PyQt4 import QtGui 

class NewQuery(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(NewQuery, self).__init__(parent) 
     self.setWindowTitle('Add New Query') 
     grid = QtGui.QGridLayout() 
     label = QtGui.QLabel('blah') 
     grid.addWidget(label,0,0) 
     self.setLayout(grid) 
     self.resize(300,200) 

app = QtGui.QApplication([]) 
mainform = NewQuery() 
mainform.show() 
newchildform = NewQuery() 
newchildform.show() 
app.exec_()