2012-02-20 23 views
0

我試圖在wxPython中創建一個模仿wx.MultiChoiceDialog的自定義對話框,但僅允許用戶選擇所有文件選擇一個複選框。這似乎是一個直截了當的過程,但我沒有成功使用textCntrl,複選框或填充文件。任何和所有的幫助和指導表示讚賞。謝謝!創建自定義對話框,允許我一次選擇所有文件或單個文件

下面,是我衆多嘗試之一:

import wx 

class Extract_file(wx.Dialog): 
    def __init__(self, parent, title): 
     wx.Dialog.__init__(self, parent, title=title, size=(345, 337)) 
     self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_RICH2) 
     wx.StaticText(self, -1, 'Files in c:\Extracted', (20,20)) 

     panel = wx.Panel(self) 


     sizer = wx.BoxSizer(wx.HORIZONTAL) 

     chbox = wx.CheckBox(panel, -1, 'CheckBox') 
     sizer.Add(chbox, 0, wx.ALL, 10) 





     compute_btn = wx.Button(self, 1, 'Okay', (167, 272)) 
     compute_btn.SetFocus() 
     clear_btn = wx.Button(self, 2, 'Cancel', (247, 272)) 

     wx.EVT_BUTTON(self, 1, self.OnOkay) 
     wx.EVT_BUTTON(self, 2, self.OnQuit) 


     self.Centre() 
     self.ShowModal() 
     self.Destroy() 


    def OnOkay(self, event): 
     #do something 

    def OnQuit(self, event): 
     self.Close(True)  

    if __name__ == '__main__': 
     app = wx.App(False) 
     dlog = Extract_file(None, 'File Extraction') 
     app.MainLoop() 

回答

1

你不需要wx.TextCtrl使這個對話框。 MultiChoiceDialog使用名爲wx.CheckBoxList的控件。你可以在網上找到很多使用它的例子。這是一個更多的代碼片段:

import wx 

class MyMCD(wx.Dialog): 
    def __init__(self, parent, message, caption, choices=[]): 
     wx.Dialog.__init__(self, parent, -1) 
     self.SetTitle(caption) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     self.message = wx.StaticText(self, -1, message) 
     self.clb = wx.CheckListBox(self, -1, choices = choices) 
     self.chbox = wx.CheckBox(self, -1, 'Select all') 
     self.btns = self.CreateSeparatedButtonSizer(wx.OK | wx.CANCEL) 
     self.Bind(wx.EVT_CHECKBOX, self.EvtChBox, self.chbox) 

     sizer.Add(self.message, 0, wx.ALL | wx.EXPAND, 5) 
     sizer.Add(self.clb, 1, wx.ALL | wx.EXPAND, 5) 
     sizer.Add(self.chbox, 0, wx.ALL | wx.EXPAND, 5) 
     sizer.Add(self.btns, 0, wx.ALL | wx.EXPAND, 5) 
     self.SetSizer(sizer) 
#  self.Fit() 

    def GetSelections(self): 
     return self.clb.GetChecked() 

    def EvtChBox(self, event): 
     state = self.chbox.IsChecked() 
     for i in range(self.clb.GetCount()): 
      self.clb.Check(i, state) 


if __name__ == '__main__': 
    l = ['AND', 'OR', 'XOR', 'NOT'] 
    app = wx.PySimpleApp() 
    dlg = MyMCD(None, 'Choose as many as you wish', 'MCD Title', choices = l) 
    if dlg.ShowModal() == wx.ID_OK: 
     result = dlg.GetSelections() 
     wx.MessageBox(str(result) + ' were chosen') 
    dlg.Destroy() 
相關問題