Создание собственного диалога, который позволяет мне выбрать все файлы одновременно или один файл по отдельности - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь создать пользовательский диалог в 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 Ответ

1 голос
/ 20 февраля 2012

Вам не нужно 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()  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...