كيفية إيقاف Qdialog من التنفيذ بينما لا يزال في عبارة __init__ (أو بعد مباشرة)؟
سؤال
أتساءل كيف يمكنني الذهاب حول إيقاف مربع حوار من فتح إذا تم تلبية شروط معينة في __init__
بيان.
يحاول التعليمة البرمجية التالية استدعاء وظيفة "Nelf.Close ()" ولديها، ولكن (أفترض) نظرا لأن مربع الحوار لم يبدأ بعد حلقة الحدث الخاصة به، فهذا لا يؤدي إلى الحدث الوثيق؟ فهل هناك طريقة أخرى لإغلاق و / أو إيقاف مربع الحوار من الفتح دون بدء حدث؟
رمز المثال:
from PyQt4 import QtCore, QtGui
class dlg_closeInit(QtGui.QDialog):
'''
Close the dialog if a certain condition is met in the __init__ statement
'''
def __init__(self):
QtGui.QDialog.__init__(self)
self.txt_mytext = QtGui.QLineEdit('some text')
self.btn_accept = QtGui.QPushButton('Accept')
self.myLayout = QtGui.QVBoxLayout(self)
self.myLayout.addWidget(self.txt_mytext)
self.myLayout.addWidget(self.btn_accept)
self.setLayout(self.myLayout)
# Connect the button
self.connect(self.btn_accept,QtCore.SIGNAL('clicked()'), self.on_accept)
self.close()
def on_accept(self):
# Get the data...
self.mydata = self.txt_mytext.text()
self.accept()
def get_data(self):
return self.mydata
def closeEvent(self, event):
print 'Closing...'
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
dialog = dlg_closeInit()
if dialog.exec_():
print dialog.get_data()
else:
print "Failed"
المحلول
سيتم تشغيل مربع الحوار فقط إذا تم استدعاء طريقة exec_. لذلك يجب عليك التحقق من الشروط في طريقة EXEC_ وإذا تم استيفاءها، قم بتشغيل Exec_ من Qdialog.
الطريقة الأخرى هي رفع استثناء داخل المنشئ (على الرغم من أنني لست متأكدا، فهذه ممارسة جيدة؛ في لغات أخرى يجب أن لا تسمح عموما بمثل هذا السلوك داخل المنشئ) وقبض عليه بالخارج. إذا قمت باستثناء استثناء، فما عليك سوى عدم تشغيل طريقة EXEC_.
تذكر أنه ما لم تقم بتشغيل Exec_، فلن تحتاج إلى إغلاق النافذة. تم بناء مربع الحوار، ولكن لا يظهر بعد.