2014-10-10 115 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