اصنع QWidget في نافذة جديدة في PYQT4
سؤال
أحاول إنشاء فصل يمتد 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_()
لا تنتمي إلى StackOverflow