Сделайте qwidget в новом окне в PyQt4 - PullRequest
1 голос
/ 02 мая 2010

Я пытаюсь создать класс, расширяющий 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 голосов
/ 02 мая 2010

следуйте совету, который дал вам @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 голос
/ 02 мая 2010

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

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 пробела или одна вкладка считаются более хорошими). ​​

...