在PyQt4中的新窗口中创建qwidget

时间:2010-05-01 22:00:14

标签: python pyqt4 qwidget

我正在尝试创建一个扩展qwidget的类,它会弹出一个新窗口,我必须遗漏一些基本的东西,

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()时,内容将叠加在主窗口上,如何在新窗口中显示?

2 个答案:

答案 0 :(得分: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_()

答案 1 :(得分: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个空格或单个制表符被认为更好)。