__init __()中的PyQt self.close()

时间:2015-07-10 22:11:54

标签: python pyqt init qdialog

我在Python 2.7下使用PyQt4时遇到了一些小问题

我正在写一个小项目,其中有一些QDialog互相打开。 所以有一个Dialog我打开并立即打开另一个Dialog来检查一些东西,当有错误检查时,我希望整个对话框关闭。它看起来像这样:

class MyDialog(QtGui.QDialog):
    def __init__(self):
        ## should get me a 10 digit number input
        text, ok = QtGui.QInputDialog.getText(self, u'Enter check')
    if ok:
        ## if clicked ok, assign tID
        tID = text
    else:
        ## else close
        self.close()

    try:   
        ## checker is a plausibilty check for the input
        ## checks, if tID is a number and 10 digits long
        ## and throws an IntegrityWarning if one of these conditions
        ## is not met         
        tID = self.checker.checkID(tID)
    except IntegrityWarning as e:
        ## on exception show error dialog
        errDialog = QtGui.QMessageBox()
        errDialog.setWindowTitle(u'Fehler')
        errDialog.setText(e.getWarning())
        ok = errDialog.exec_()
        if ok != True:
            ## close the whole dialog if user cancels
            self.close()

    self.tAccount = self.tControl.getAccount(tID)

所以这基本上就是我所做的,除了我在分配之前得到使用tID的Errormessage之外它工作得很好。我的程序在那之后工作得很好,但我想知道错误来自哪里。令我感到好奇的是,即使我将tAccount的最后一个赋值放入try-except:pass语句中,错误也会被抛出到控制台,而不会被传递,因为它应该是显而易见的。所以我的猜测是我不能简单地在__init__()例程中终止程序。我尝试了一个return语句而不是close()语句,并销毁了MainWindow中调用函数中的QDialog。这使对话框显示并保持为空,就像模态一样,我必须关闭它才能在MainWindow中恢复。

有人可以告诉我为什么Dialog __init__()在关闭后会恢复?

1 个答案:

答案 0 :(得分:3)

这是Python的正常行为。 self.close()不是返回语句,因此不会退出__init__

此外,__init__实际上并未在屏幕上显示对话框,因此在self.close()中撰写__init__毫无意义。我建议重新构建代码,以便此应用程序逻辑位于__init__之外,并根据MyDialog和{{1}的结果决定是否初始化并显示QInputDialog }}