0

I'm attempting to create a custom dialog in wxPython that mimics the wx.MultiChoiceDialog, yet only differs in allowing a user to select all files with the selection of a single check box. This seemed to be a straight forward process, but I've not had success with the textCntrl, checkboxes, or populating the files. Any and all help and direction is appreciated. Thanks!

Below, is one of my many attempts:

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()
4

1 に答える 1

2

wx.TextCtrlこのダイアログを作成する必要はありません。MultiChoiceDialogという名前のコントロールを使用しますwx.CheckBoxList。その使用例は、ネット上で多数入手できます。もう 1 つのコード スニペットを次に示します。

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()  
于 2012-02-20T17:36:20.457 に答える