كيفية إيقاف Qdialog من التنفيذ بينما لا يزال في عبارة __init__ (أو بعد مباشرة)؟

StackOverflow https://stackoverflow.com/questions/2405750

  •  18-09-2019
  •  | 
  •  

سؤال

أتساءل كيف يمكنني الذهاب حول إيقاف مربع حوار من فتح إذا تم تلبية شروط معينة في __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_، فلن تحتاج إلى إغلاق النافذة. تم بناء مربع الحوار، ولكن لا يظهر بعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top