PySide Dialog在accept上返回值

时间:2014-10-10 13:33:08

标签: python qt pyside

我正在制作一个将字典返回给函数的Dialog。但是,输入需要在可以处理之前进行验证。

我使用以下代码运行Dialog并返回字典:

if transadd.exec_():
        knowns = transadd.widg.get_values()

widg是Dialog,transadd是一个拿着Dialog的小部件。

get_values只是遍历所有组合框并将它们的值添加到字典中:

def get_values(self):
    for key in self.unknowns:
        self.unknowns[key] = self.unknown_trans[key][1].currentText()

    return self.unknowns

最后,我有一个验证方法,当用户点击“确定”时,会激活替换方法:

def validate(self, Dialog):
    counting = 1
    Errored = False
    for key in self.unknowns:
        if self.unknown_trans[key][1].currentText() == "Please Select..." and \
                self.gridLayout.itemAtPosition(counting, 3) != 0:
            self.gridLayout.addWidget(
                QtGui.QLabel("Missing Answer", Dialog),
                counting, 3, 1, 1
                )
            Errored = True
            self.sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
                                                QtGui.QSizePolicy.Expanding)
        counting += 1
    if not Errored:
        Dialog.accept()

目前以上所有内容的确正如我所愿。当用户单击取消对话框(reject())时出现问题。在这种情况下,验证不会发生,因为我们正在取消哪个是好的。但是由于代码的第一部分仍然运行get_values - 这反过来会运行函数的其余部分,并且会产生不准确的输出。

所以我的问题是:如果用户单击“接受”而不是拒绝,我怎样才能使对话框返​​回值?

1 个答案:

答案 0 :(得分:2)

通常,如果您没有以标准方式运行对话框(顶级模式窗口小部件),您仍然可以使用结果访问它是被接受还是被拒绝:

transadd.widg.result()