سؤال

أحاول إنشاء فصل يمتد 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)

عندما يتم إجراء مثيل جديد من هذا في فئة النافذة الرئيسية ، ويسمى العرض () ، يتم تداخل المحتوى على النافذة الرئيسية ، كيف يمكنني عرضه في نافذة جديدة؟

هل كانت مفيدة؟

المحلول

إن initialiser superclass خاطئ ، ربما تعني:

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 مسافات أو علامة تبويب واحدة تعتبر أجمل).

نصائح أخرى

اتبع النصيحة التي قدمها لك 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_()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top