2014-10-10 114 views
0

我正在做一个对话框,它将一个字典返回给一个函数。但是输入需要在可以处理之前进行验证。PySide对话框返回值接受

我用下面的代码来运行对话框,并返回字典:

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

与widg作为对话和transadd是保持对话的小部件。

get_values简单地通过所有的组合框运行,并增加了它们的值的字典:

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

    return self.unknowns 

最后我有它取代被激活的验证方法,当用户点击“OK”:

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() 

目前所有上述工作正是我想要的。用户点击取消对话框(拒绝())时出现问题。在这种情况下,验证不会发生,因为我们正在取消哪个是好的。但是,由于第一部分代码,get_values仍然运行 - 这反过来会运行该函数的其余部分,并会产生不准确的输出。

所以我的问题是:只有当用户点击接受而不是拒绝时,我如何才能使对话框返​​回值?

+0

为什么你有一个小部件内的对话框? – mdurant 2014-10-10 14:06:58

+0

由于QtDesigner导出。可能有点过分,但我做了一个包装类 - 作为一个小部件 - 它从QtDesigner中获取一个导出的Dialog类并运行它。这会对上述产生影响吗? – Scironic 2014-10-10 14:12:28

+1

我想你会得到这个,因为你在持有者上运行exec_(),而逻辑(接受/拒绝)发生在transadd.widg中;没有看到代码就没有把握。 – mdurant 2014-10-10 14:13:47

回答

2

在一般情况下,如果你不运行在标准的方式对话框(顶级模式部件),你仍然可以访问它是否被接受或拒绝使用结果:

transadd.widg.result() 
+0

谢谢,当我回家时,我会放弃这一点。 – Scironic 2014-10-10 14:20:37

+0

谢谢 - 发现我根本没有问题,但你的建议帮助我调试得出这个结论。 – Scironic 2014-10-10 19:19:05