2010-05-01 2 views
1

Я пытаюсь сделать класс, который расширяет QWidget, который появляется новое окно, я должен быть что-то фундаментальное отсутствует,Сделать QWidget в новом окне в 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) 

когда новый экземпляр этого сделанный в классе главного окна и вызываемый show(), содержимое наложено в главном окне, как я могу отобразить его в новом окне?

ответ

1

Ваш суперкласс инициализатора неправильно, вы, вероятно, имел в виду:

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

(причина использовать super):

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

Но, может быть, вы хотите наследовать от QtGui.QDialog вместо (это может быть уместно - трудно сказать в текущем контексте).

Также обратите внимание, что отступ в вашем примере кода неверен (одно место будет работать, но 4 пробела или одна вкладка считаются более приятными).

+0

Да, QDialog является то, что мне было нужно, спасибо. Единственное пространство, должно быть, было проблемой с копированием кода, у меня есть вкладки в коде :) – matt

2

следовать совету, который @ChristopheD дал вам и попробовать это вместо

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_() 
Смежные вопросы