Создание пользовательского диалога в wxPython

#wxpython

#wxpython

Вопрос:

Как создать пользовательский диалог в wxPython? Я намерен создать диалоговое окно с двумя кнопками под названием «Gmail» и «Outlook» вместо «OK» и «ОТМЕНА» или любых других встроенных опций.

Кто-нибудь знает об учебном пособии? Это вообще можно сделать?

Заранее спасибо.

Ответ №1:

Да, вы можете создавать свои собственные диалоги.

 import wx
from wx.lib import sized_controls

ID_GMAIL = wx.NewId()
ID_OUTLOOK = wx.NewId()


class CustomDialog(sized_controls.SizedDialog):

    def __init__(self, *args, **kwargs):
        super(CustomDialog, self).__init__(*args, **kwargs)
        pane = self.GetContentsPane()

        static_line = wx.StaticLine(pane, style=wx.LI_HORIZONTAL)
        static_line.SetSizerProps(border=(('all', 0)), expand=True)

        pane_btns = sized_controls.SizedPanel(pane)
        pane_btns.SetSizerType('horizontal')
        pane_btns.SetSizerProps(align='center')

        button_ok = wx.Button(pane_btns, ID_GMAIL, label='Gmail')
        button_ok.Bind(wx.EVT_BUTTON, self.on_button)

        button_ok = wx.Button(pane_btns, ID_OUTLOOK, label='Outlook')
        button_ok.Bind(wx.EVT_BUTTON, self.on_button)

        self.Fit()

    def on_button(self, event):
        if self.IsModal():
            self.EndModal(event.EventObject.Id)
        else:
            self.Close()


if __name__ == '__main__':
    app = wx.App(False)
    dlg = CustomDialog(None, title='Custom Dialog')
    result = dlg.ShowModal()
    if result == ID_GMAIL:
        print('Gmail')
    elif result == ID_OUTLOOK:
        print('Outlook')
    dlg.Destroy()
    app.MainLoop()
  

Комментарии:

1. Спасибо, у меня все же есть несколько вопросов. Что делает ‘self. GetContentsPane()’ делать? Более того, когда я пытаюсь реализовать это в рамках события, ничего не происходит. Графического интерфейса вообще нет. :/ Я добавлю свой код, реализовав его как РЕДАКТИРОВАНИЕ:

2. Не обращайте внимания на то, что «графический интерфейс не работает» в моем вопросе. Было глупой ошибкой с моей стороны. 🙂