2013-07-11 17 views
1

如何從我的框架中獲取按鈕單擊值?wxpython,傳遞用於後臺檢查的布爾標誌

btnYes = wx.Button(panel, -1, "OK")  
self.Bind(wx.EVT_BUTTON, self.clickYes, btnYes) 

def clickYes(self, evt): 
     print "clicked Yes" 
     self.Close() 

每當用戶點擊是的,我希望得到一個值在其他模塊進行檢查。像確認標誌。當用戶確認一個項目,然後繼續做其他項目。我將使用的確認標誌如下:

def my_methodABC():  
    matchList = [] 
    for x, y in product(d1rows, d2rows): 
     if userConfirmedFromWxPythonClickYesButton(): 
      matchList.append(abc) 

    return matchList 

回答

0

使用MessageDialog。網上有很多例子。這裏有幾個:

這裏是一個非常簡單的例子:

import wx 

######################################################################## 
class MainFrame(wx.Frame): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Test") 
     panel = wx.Panel(self) 

     btn = wx.Button(panel, label="Ask Question") 
     btn.Bind(wx.EVT_BUTTON, self.showMessageDlg) 

    #---------------------------------------------------------------------- 
    def showMessageDlg(self, event): 
     """ 
     Show a message 
     """ 
     msg = "Do you want to continue?" 
     title = "Question!" 
     style = wx.YES_NO|wx.YES_DEFAULT|wx.ICON_QUESTION 
     dlg = wx.MessageDialog(parent=None, message=msg, 
           caption=title, style=style) 
     result = dlg.ShowModal() 
     if result == wx.ID_YES: 
      print "User pressed yes!" 
     else: 
      print "User pressed no!" 
     dlg.Destroy() 


if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MainFrame() 
    frame.Show() 
    app.MainLoop() 

你可能會想打電話給你的對手名單方法,當用戶按下yes按鈕,而不僅僅是向stdout發送消息。

+0

親愛的@Mike Driscoll謝謝你的回答,我想知道我是否可以通過這個課程之外的「結果」?因爲,正如我的問題所述,我想檢查它是否在另一個班級循環。 – Peter

+0

GUI是基於事件的。如果你有一個長時間運行的進程,它會阻止GUI,它會凍結並無法使用。你將不得不把你的循環放到一個線程中,並使用wx的線程安全方法來傳遞消息。或者,如果這是一個循環,當用戶按下一個按鈕並且循環本身正在顯示消息框時運行,我認爲這會起作用。但是,在後一種情況下,結果會返回到循環本身,所以沒有將它「傳遞」給另一個類。 –