2010-05-01 84 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_()