在PyQt4中将qwidget放入新窗口

1 投票
2 回答
6731 浏览
提问于 2025-04-15 22:14

我正在尝试创建一个类,这个类是从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 个回答

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

你的父类初始化器写错了,可能你想写的是:

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 继承(这可能是合适的,但根据目前的上下文很难判断)。

另外,注意你代码示例中的缩进是错的(一个空格可以用,但四个空格或一个制表符会显得更好)。

撰写回答