Рубрики
Без рубрики

Диалоги WxPython (часть 2 из 2)

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

На второй половину этой серии я обнаружил, что есть еще больше диалогов, чем я изначально думал. Хотя бы, вероятно, было бы хорошей идеей, чтобы разделить это на три части, мы собираемся придерживаться всего в двух. В этой статье мы собираемся покрыть следующие диалоги:

  • Общий бойранс (возраст)
  • Imagedialog
  • wx.multichoiciedialog.
  • wx.pagesetupdialog.
  • wx.printdialog.
  • wx.progressdialog.
  • Pybusyinfo (AGW)
  • MyProgress (возраст)
  • ScrolledMessedialog
  • wx.singlechoiciedialog.
  • wx.textentrydialog.

Для непосвященных, существует также диалоговое окно простую коробку, которое не здесь для самой простой причины, что он уже был покрыт в этом блоге за пределами этой серии. Проверьте это для себя. Просто чтобы очистить любую путаницу о том, почему WX.Dialog не здесь: эта серия только охватывает предварительно созданные диалоги. Виджет WX.Dialog отлично подходит для создания собственных пользовательских диалогов. Последнее примечание, которое должно быть охвачено, заключается в том, что пример код здесь был дернулся от демонстрации WXPYPHON и повторно предназначен для этой статьи.

Теперь, на шоу!

GenericMessageedialog.

GenericMessageedialog является частью библиотеки AGW общих элементов управления, созданной Andrea Gavana. Это дает нам больше вариантов, чем сам мессегагедиал, потому что GenericMessageialog написан в чистом Python и поэтому гораздо более зажимается. Давайте посмотрим, как мы можем создать диалог на скриншоте:

import images
import wx
import wx.lib.agw.genericmessagedialog as GMD

_msg = "This is the about dialog of GenericMessageDialog demo.\n\n" + \
       "Author: Andrea Gavana @ 07 Oct 2008\n\n" + \
       "Please report any bugs/requests of improvements\n" + \
       "to me at the following addresses:\n\n" + \
       "andrea.gavana@gmail.com\n" + "gavana@kpo.kz\n\n" + \
       "Welcome to wxPython " + wx.VERSION_STRING + "!!"

########################################################################
class MyForm(wx.Frame):
    """
    Based on Andrea Gavana's demo from the wxPython Demo
    """
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "Generic Message Dialog Tutorial",
                          size=(575,225))
                
        self.mainPanel = wx.Panel(self)
        self.buttonSizer_staticbox = wx.StaticBox(self.mainPanel, -1, "Buttons Styles")
        self.ok = wx.CheckBox(self.mainPanel, -1, "wx.OK")
        self.yes_no = wx.CheckBox(self.mainPanel, -1, "wx.YES_NO")
        self.cancel = wx.CheckBox(self.mainPanel, -1, "wx.CANCEL")
        self.yes = wx.CheckBox(self.mainPanel, -1, "wx.YES")
        self.no = wx.CheckBox(self.mainPanel, -1, "wx.NO")
        self.no_default = wx.CheckBox(self.mainPanel, -1, "wx.NO_DEFAULT")
        self.help = wx.CheckBox(self.mainPanel, -1, "wx.HELP")
        self.dialogStyles = wx.RadioBox(self.mainPanel, -1, "Dialog Styles",
                                        choices=["wx.ICON_INFORMATION", "wx.ICON_WARNING",
                                                 "wx.ICON_EXCLAMATION", "wx.ICON_ERROR",
                                                 "wx.ICON_QUESTION"],
                                        majorDimension=5, style=wx.RA_SPECIFY_ROWS)
        self.showDialog = wx.Button(self.mainPanel, -1, "Show GenericMessageDialog")

        self.SetProperties()
        self.DoLayout()

        self.Bind(wx.EVT_BUTTON, self.OnShowDialog, self.showDialog)
        self.Bind(wx.EVT_CHECKBOX, self.OnCheckBox)


    def SetProperties(self):
        
        self.ok.SetValue(1)
        self.dialogStyles.SetSelection(0)
        self.showDialog.SetDefault()


    def DoLayout(self):

        frameSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        buttonSizer = wx.StaticBoxSizer(self.buttonSizer_staticbox, wx.VERTICAL)
        buttonSizer.Add(self.ok, 0, wx.LEFT|wx.RIGHT|wx.TOP, 5)
        buttonSizer.Add((0, 2), 0, 0, 0)
        buttonSizer.Add(self.yes_no, 0, wx.LEFT|wx.RIGHT, 5)
        buttonSizer.Add((0, 2), 0, 0, 0)
        buttonSizer.Add(self.cancel, 0, wx.LEFT|wx.RIGHT, 5)
        buttonSizer.Add((0, 2), 0, 0, 0)
        buttonSizer.Add(self.yes, 0, wx.LEFT|wx.RIGHT, 5)
        buttonSizer.Add((0, 2), 0, 0, 0)
        buttonSizer.Add(self.no, 0, wx.LEFT|wx.RIGHT, 5)
        buttonSizer.Add((0, 2), 0, 0, 0)
        buttonSizer.Add(self.no_default, 0, wx.LEFT|wx.RIGHT, 5)
        buttonSizer.Add((0, 2), 0, 0, 0)
        buttonSizer.Add(self.help, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)
        mainSizer.Add(buttonSizer, 0, wx.ALL, 5)
        mainSizer.Add(self.dialogStyles, 0, wx.ALL, 5)
        mainSizer.Add((10, 0), 0, 0, 0)
        mainSizer.Add(self.showDialog, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 10)
        mainSizer.Add((10, 0), 0, 0, 0)
        self.mainPanel.SetSizer(mainSizer)

        frameSizer.Add(self.mainPanel, 1, wx.EXPAND)
        self.SetSizer(frameSizer)
        frameSizer.Layout()
        

    def OnCheckBox(self, event):

        obj = event.GetEventObject()
        widgets = [self.yes, self.yes_no, self.no, self.no_default]
        if not event.IsChecked():
            return
        
        if obj == self.ok:
            for checks in widgets:
                checks.SetValue(0)
        elif obj in widgets:
            self.ok.SetValue(0)
            

    def OnShowDialog(self, event):

        btnStyle = 0
        for child in self.mainPanel.GetChildren():
            if isinstance(child, wx.CheckBox):
                if child.GetValue():
                    btnStyle |= eval(child.GetLabel())

        dlgStyle = eval(self.dialogStyles.GetStringSelection())
        dlg = GMD.GenericMessageDialog(self, _msg,
                                       "A Nice Message Box",
                                       btnStyle | dlgStyle)
        dlg.SetIcon(images.Mondrian.GetIcon())
        dlg.ShowModal()
        dlg.Destroy()
        
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Первое, что искать в любом примере, это то, что импортируется в верхней части файла. В этом случае мы используем images.py Файл из WXPYPHON DEMO для предоставления некоторых изображений в этом примере. Мы также импортируем диалоговое окно, которое нам нужно от wx.lib.agw.genericmessageedialog Отказ Мы можем пропустить код инициализации кадра, поскольку мы хотим сосредоточиться на диалоговом окне. Первый диалог, связанный с методом, который мы видим, это SetProperties Отказ Он устанавливает несколько параметров по умолчанию в диалоговом окне, например, проверка флажков «ОК», выбирая первую кнопку переключателя и поместив фокус на кнопку, которая откроет общий диалог. Первые два расскажут нашему методу создателя диалога, Onshowdialog какой диалог мы хотим. Таким образом, наш следующий метод, чтобы посмотреть, является Onshowdialog One.

Здесь мы обнаруживаем, что универсальный MESSAGELOG принимает в основном одинаковые значения, что обычный босс, а именно родитель, сообщение, заголовок заголовка и некоторые стили. Вы также можете установить его размер, POS и Agwstyle, когда это применимо. Мы также можем добавить значок в диалог, вызывая Seticon. Там у вас есть! Диалог общих сообщений!

Просмотр изображений с imagedialog

Imagedialog – это удобный диалог, который вы можете использовать для предварительного просмотра различных форматов изображения. Этот диалог – еще один универсальный диалог, но это не часть библиотеки AGW. Имагедиал вполне удобный и супер легко создать. Как легко? Хорошо проверьте код ниже и убедитесь сами!

import os
import wx
import wx.lib.imagebrowser as ib

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "ImageDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a ImageDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo by the same name
        """
        # get current working directory
        dir = os.getcwd()

        # set the initial directory for the demo bitmaps
        initial_dir = os.path.join(dir, 'bitmaps')

        # open the image browser dialog
        dlg = ib.ImageDialog(self, initial_dir)

        dlg.Centre()

        if dlg.ShowModal() == wx.ID_OK:
            # show the selected file
            print "You Selected File: " + dlg.GetFile()
        else:
            print "You pressed Cancel"

        dlg.Destroy()
        
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Если вы посмотрите в onbutton Способ, вы можете увидеть, как мы инициализируем это диалоговое окно. В основном все, что вам нужно кормить, элемент управления является родитель и каталог, полный изображений, то показать диалог. Это оно! Разве я не сказал тебе, что это было легко?

Делать выбор с wx.multichoicialog

Что вы делаете, если вам нужно попросить пользователя одной или несколькими элементами простой информации? Вы можете создать свой собственный элемент управления или вы можете выбрать wx.multichoiciedialog Отказ MulticoIceiLog предоставляет вам возможность обслуживать диалоговое окно, которое позволяет пользователю выбрать несколько вариантов. Да, это довольно очевидно … так далее к коду!

import wx

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "MultiChoiceDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a wx.MultiChoiceDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo - opens the MultiChoiceDialog
        and prints the user's selection(s) to stdout
        """
        lst = ["Python", "Ruby", "Perl", "PHP"]
        dlg = wx.MultiChoiceDialog( self, 
                                   "Pick some programming languages",
                                   "wx.MultiChoiceDialog", lst)
        
        if (dlg.ShowModal() == wx.ID_OK):
            selections = dlg.GetSelections()
            strings = [lst[x] for x in selections]
            print "You chose:" + str(strings)

        dlg.Destroy()
        
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

MultichoiCialog это как большинство диалогов. Он принимает родитель, описательную метку, оконную подпись и список вариантов. Чтобы получить выбор пользователя, все, что вам нужно сделать, это позвонить в диалоговое окно GetSultions метод. Это оно!

wx.pagesetupdialog.

WX.PagesetUpDialog используется для настройки нескольких параметров для печати страницы или просто настройка страницы для редактирования. Вы можете использовать его, чтобы отрегулировать размер бумаги, поля и, следует ли страницу в ландшафте или портретных ориентациях. Вот как вы устанавливаете:

import wx

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "PageSetupDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a PageSetupDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo - sets some default values for the 
        PageSetupDialog, then opens it. If the user presses OK, the 
        user's choices are extracted and printed to stdout
        """
        data = wx.PageSetupDialogData()
        data.SetMarginTopLeft( (15, 15) )
        data.SetMarginBottomRight( (15, 15) )
        #data.SetDefaultMinMargins(True)
        data.SetPaperId(wx.PAPER_LETTER)

        dlg = wx.PageSetupDialog(self, data)

        if dlg.ShowModal() == wx.ID_OK:
            data = dlg.GetPageSetupData()
            tl = data.GetMarginTopLeft()
            br = data.GetMarginBottomRight()
            print 'Margins are: %s %s\n' % (str(tl), str(br))

        dlg.Destroy()
        
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Давайте возьмем гандурь на onbutton метод. Сначала нам нужно настроить некоторые значения по умолчанию для диалогового окна, для чего есть первые четыре строки. Далее нам нужно получить выбор пользователя, поэтому в условном порядке, если оператор мы видим, как получить доступ к нескольким настройкам в диалоговом окне, например Getmargintopleft или Getmarginbottomright Отказ Вы можете получить другие биты информации, используя другие GetTers, такие как GetPapersize Отказ Обратите внимание, что для получения доступа к этим методам вы сначала должны создать объект на основе Getpageetupdata Отказ

wx.printdialog.

WX.Printdialog позволяет пользователю выбрать, какой принтер печатать и дать пользователю обычные варианты, которые он или она увидели, пытались ли они что-то распечатать. Это удобная обертка вокруг диалогового окна нативной печати платформы. Вот как вы делаете один:

import wx

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "PrintDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a wx.PrintDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, evt):
        """
        Based on the wxPython demo - Sets up a few defaults for the dialog
        before showing it modally. 
        """
        data = wx.PrintDialogData()

        data.EnableSelection(True)
        data.EnablePrintToFile(True)
        data.EnablePageNumbers(True)
        data.SetMinPage(1)
        data.SetMaxPage(5)
        data.SetAllPages(True)

        dlg = wx.PrintDialog(self, data)

        if dlg.ShowModal() == wx.ID_OK:
            data = dlg.GetPrintDialogData()
            print 'GetAllPages: %d\n' % data.GetAllPages()
        dlg.Destroy()

#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Подобно PageSetUsDialog, нам нужно также настроить несколько по умолчанию для этого диалога. Здесь мы устанавливаем номера страниц Min и Max, включите печать в файл и т. Д. Когда вы получаете выбор пользователя, вы можете сохранить их и создать диалог с этой информацией, чтобы они не должны повторно настроить их печать работа, если они хотят распечатать его снова. Во всяком случае, чтобы на самом деле получить выбор пользователя, мы называем диалоговое окно GetPrintDialogdata Способ, а затем используйте результат, чтобы запросить другие части. Наш пример просто показывает, как получить все страницы, которые будут печатать. Вы можете сверлить до получения дополнительной информации, выполнив следующее:

pd = data.GetPrintData()
>>> pd.Duplex
0
>>> pd.GetFilename()
u''
>>> pd.GetOrientation()
1
>>> pd.GetPaperSize()
wx.Size(210, 297)
>>> pd.GetPrintMode()

Вам придется обратиться к документации для WxPython, wxwidgets или, может быть, даже ваша платформа, чтобы выяснить, что значит некоторые из результатов.

wx.progressdialog.

WX.PROGRESSDIALOG можно использовать для того, чтобы показать пользователю, насколько далеко загрузки является или предоставляет пользователю отзывы о некотором другом процессе длительного выполнения. Вы также можете использовать WX.GAUEGE или PYPROGRESS (AGW), чтобы дать пользователю подобную информацию. Мы скоро посмотрим на это, но сначала мы собираемся проверить, как создать WX.PROGRESSDialog:

# progressDialog.py

import wx

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "ProgressDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a ProgressDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, evt):
        """
        Copied from the wxPython demo
        """
        max = 80

        dlg = wx.ProgressDialog("Progress dialog example",
                               "An informative message",
                               maximum = max,
                               parent=self,
                               style = wx.PD_CAN_ABORT
                                | wx.PD_APP_MODAL
                                | wx.PD_ELAPSED_TIME
                                #| wx.PD_ESTIMATED_TIME
                                | wx.PD_REMAINING_TIME
                                )

        keepGoing = True
        count = 0

        while keepGoing and count < max:
            count += 1
            wx.MilliSleep(250)

            if count >= max / 2:
                (keepGoing, skip) = dlg.Update(count, "Half-time!")
            else:
                (keepGoing, skip) = dlg.Update(count)
                
        dlg.Destroy()
        
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Как видите, ProgressDialog принимает следующие аргументы: оконная подпись, сообщение, количество времени для запуска, родитель и различных стилей. Мы добавили стиль wx.pd_can_abort, чтобы позволить нам прервать диалог. Остальные стили и методы довольно явно объясняют.

Pybusyinfo (AGW)

В предыдущей статье мы покрывали BateDLG. Ну, Андреа Гавана пошла и написала чистую версию Python, что практически неизвестный диалог, который дает нам возможность добавить изображение! И поскольку это Python, мы можем добавить другие функции к нему довольно легко. Вот как вы создаете один:

import images
import wx
import wx.lib.agw.pybusyinfo as PBI

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "PyBusyInfo Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Test PyBusyInfo")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo by the same name
        """
        event.Skip()
        message = "Please wait 5 seconds, working..."
        busy = PBI.PyBusyInfo(message, parent=None, title="Really Busy",
                              icon=images.Smiles.GetBitmap())

        wx.Yield()
        
        for indx in xrange(5):
            wx.MilliSleep(1000)

        del busy
                
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Обратите внимание, что Pybusyinfo Также имеет свойский метод уничтожения диалога. В этом случае мы называем встроенный Python, «del». Надеюсь, г-н Гавана добавит метод уничтожения () для этого, чтобы диалоговое окно было уничтожено стандартным способом. Также обратите внимание, как мы добавляем значок, просто передавая его с параметром значка.

MyProgress (возраст)

Pyprogress Диалог приходит к нам вежливостью трудолюбивой Андреа Гавана. Да, это еще один виджет библиотеки AGW, что означает, что это также чистый Python. Это выглядит немного отличается от wx.progressdialog. Надеюсь, вам тоже понравится эстетика. Давайте узнаем, как сделать один из наших:

import images
import wx
import wx.lib.agw.pyprogress as PP

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "PyBusyInfo Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Test PyBusyInfo")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo by the same name
        """
        event.Skip()
        style = wx.PD_APP_MODAL|wx.PD_ELAPSED_TIME|wx.PD_CAN_ABORT
        dlg = PP.PyProgress(None, -1, "PyProgress Example",
                            "An Informative Message",                            
                            style=style)
        max = 400
        keepGoing = True
        count = 0

        while keepGoing and count < max:
            count += 1
            wx.MilliSleep(30)

            if count >= max / 2:
                keepGoing = dlg.UpdatePulse("Half-time!")
            else:
                keepGoing = dlg.UpdatePulse()

        dlg.Destroy()
        wx.SafeYield()
        wx.GetApp().GetTopWindow().Raise()
        
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Код выше, в значительной степени похоже на все другие диалоги, которые мы видели до сих пор. Просто для удовольствия, я позволю вам выяснить, как это работает.

ScrolledMessedialog

ScrolledMessedialog является одним из немногих общих диалогов, которые Андреа Гавана не написала. Это также один из самых простых для создания и использования. Не верь мне? Ну, прочитайте код ниже и посмотрите, насколько вы неверны!

import wx
import wx.lib.dialogs

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "ScrolledMessageDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a ScrolledMessageDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo by the same name
        """
        f = open("imageDialog.py", "r")
        msg = f.read()
        f.close()

        dlg = wx.lib.dialogs.ScrolledMessageDialog(self, msg, "message test")
        dlg.ShowModal()

        dlg.Destroy()
                
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Как вы можете четко видеть, все, что вам нужно, это какой-то текст для передачи в диалог. В этом случае мы читаем одну из других файлов Python и передали его в диалог. Я надеюсь, что вы обращали внимание на специальный импорт, который нам приходилось делать для этих общих диалогов. Для этого нам пришлось импортировать wx.lib.dialogs Чтобы получить доступ к ScrolledMessedialog Отказ

wx.singlechoiciedialog.

Иногда вы хотите предоставить пользователю список предметов, но позволит ему выбрать один. Вы можете использовать пользовательский WX.Dialog с набором радиопередачи или вы можете использовать wx.singlechoiciedialog Отказ Если вы не догадались, мы идем со последним …

import wx

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "SingleChoiceDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a SingleChoiceDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo by the same name
        """
        dlg = wx.SingleChoiceDialog(
                self, "What's your favorite langauge?", 'The Caption',
                ["C++", "VB", "Python", "Perl", "Ruby", "FoxPro"], 
                wx.CHOICEDLG_STYLE
                )

        if dlg.ShowModal() == wx.ID_OK:
            print 'You selected: %s\n' % dlg.GetStringSelection()

        dlg.Destroy()
                
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Здесь SingleChoiciedialog Принимает большинство из тех же аргументов, которые сделали другие диалоги. Обратите внимание, что нам нужно пройти список, чтобы создать список вариантов и стиль WX.CHOICELG_STYLE, чтобы правильно сделать диалоговое окно. Кроме того, мы были там, сделали это.

wx.textentrydialog.

wx.textentrydialog Дает нам возможность позволить пользователю рассказать нам все, что он хочет. Да, это страшно, но иногда вам просто нужно это сделать. Вы можете использовать этот диалог, чтобы получить неспецифические комментарии или отзывы от своих почтенных пользователей. Вот как вы можете сделать это:

import wx

########################################################################
class MyForm(wx.Frame):
 
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "TextEntryDialog Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        b = wx.Button(panel, label="Create and Show a TextEntryDialog")
        b.Bind(wx.EVT_BUTTON, self.onButton)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(b, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        
    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Based on the wxPython demo by the same name
        """
        dlg = wx.TextEntryDialog(
                self, 'What is your favorite programming language?',
                'Eh??', 'Python')

        dlg.SetValue("Python is the best!")

        if dlg.ShowModal() == wx.ID_OK:
            print "you accepted!"
        dlg.Destroy()
        
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Здесь мы видим, что аргументы диалогов включают следующее: родитель, сообщение, подпись, defaultvalue. Конечно, мы переопределяем defaultvalue, когда мы называем диалоговое окно SetValue () метод. Остальная часть кода должна выглядеть знакомыми.

Обертывание

Если вы сделали это далеко, поздравляемся! Вы только что задолжены через одно из самых длинных постов, когда-либо написанных на этом сайте! Теперь вы должны быть экспертом в диалогах WXPYPHON. Если вы хотите еще больше информации, не стесняйтесь читать много ссылок ниже, чтобы продолжить свое образование. И выйдите туда и начните использовать эти диалоги для большого эффекта!

Примечание. Я не использовал ничего, кроме демонстрации WXPYPHON, IDE WINGWARE и несколько страниц документации в написании этой статьи.

Дополнительное чтение

Больше чтения

Загрузки

  • dialogs_part_two.zip
  • dialogs_part_two.tar.

Примечание. Этот код был протестирован на следующем:

  • Windows XP Professional, WxPython 2.8.10.1/2.8.11.0, Python 2.5
  • Windows 7 Home Edition, WxPython 2.8.10.1, Python 2.6