1

新しいウィンドウをポップアップ表示する 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() が呼び出されると、コンテンツがメイン ウィンドウにオーバーレイされます。新しいウィンドウに表示するにはどうすればよいですか?

4

2 に答える 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_()
于 2010-05-01T22:36:50.293 に答える
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が必要になる場合があります (それは適切かもしれません - 現在のコンテキストではわかりにくい)。

また、コード例のインデントが間違っていることに注意してください (1 つのスペースでも機能しますが、4 つのスペースまたは 1 つのタブの方が適切と見なされます)。

于 2010-05-01T22:11:01.917 に答える