我正在制作一个将字典返回给函数的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 - 这反过来会运行函数的其余部分,并且会产生不准确的输出。
所以我的问题是:如果用户单击“接受”而不是拒绝,我怎样才能使对话框返回值?
答案 0 :(得分:2)
通常,如果您没有以标准方式运行对话框(顶级模式窗口小部件),您仍然可以使用结果访问它是被接受还是被拒绝:
transadd.widg.result()