2010-05-01 70 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 2010-05-01 22:29:36

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_()