我正在做一個對話框,它將一個字典返回給一個函數。但是輸入需要在可以處理之前進行驗證。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