我正在做一个对话框,它将一个字典返回给一个函数。但是输入需要在可以处理之前进行验证。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仍然运行 - 这反过来会运行该函数的其余部分,并会产生不准确的输出。
所以我的问题是:只有当用户点击接受而不是拒绝时,我如何才能使对话框返回值?
为什么你有一个小部件内的对话框? – mdurant 2014-10-10 14:06:58
由于QtDesigner导出。可能有点过分,但我做了一个包装类 - 作为一个小部件 - 它从QtDesigner中获取一个导出的Dialog类并运行它。这会对上述产生影响吗? – Scironic 2014-10-10 14:12:28
我想你会得到这个,因为你在持有者上运行exec_(),而逻辑(接受/拒绝)发生在transadd.widg中;没有看到代码就没有把握。 – mdurant 2014-10-10 14:13:47