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

WXPYPHON: Введение в XRC

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

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

Вы когда-нибудь задавались вопросом, можете ли вы создать программу WXPYPHON с помощью XML? Ну, я никогда не делал, но есть способ, и его имя XRC. На самом деле, WXPYPHON поставляется с редактором, называемым xrced, который вы можете использовать для макета вашего GUI и генерировать код XML с. В этой статье мы дадим вам быстрый проход XRC и как использовать его, чтобы создать пара скелетов GUI. Мы рассмотрим два примера, которые используют только управление XRC, а затем треть, который смешивается в некоторых дополнительных формах без XRC.

Создание экрана входа в систему с XRC

Общий диалог, который мы часто видим, это диалог входа в систему. Я использовал xrced, чтобы создать следующий код XML:

XML? WxVertical Имя пользователя: WXALL 5 Пароль: WXALL 5 wxte_process_enter | wxte_password. Авторизоваться wxall | wxalign_centre. 5 Отмена wxall | wxalign_centre. 5 2 3 4 2 5

Чтобы использовать XRC код в вашем WXPYHON, все, что вам нужно сделать, это «Импортировать wx.xrc» или использовать “из wx import xrc”. Давайте посмотрим, как выглядит код Python:

import wx
from wx import xrc

class MyApp(wx.App):
    def OnInit(self):
        res = xrc.XmlResource("login.xrc")
        
        frame = res.LoadFrame(None, 'mainFrame')
        
        frame.Show()
        return True
        
if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

В указанном выше коде мы используем XRC Xmlresource Метод открытия нашего XML-файла и загрузите его в нашу программу. Далее мы используем полученную переменную для загрузки определенных виджетов из файла. В этом случае мы загружаем только рамку, позвонив LoadFrame Отказ Обратите внимание, что мы прошли Нет в вызов нагрузки. Этот первый аргумент является родительским аргументом, и поскольку этот кадр не должен иметь родителя, мы не прошли его. Наконец, мы называем кадр Показать Метод, поэтому мы можем на самом деле увидеть нашу программу. Это все, что есть к этому! Теперь давайте перейдем на что-то немного сложное.

Создание ноутбука с XRC

Создание виджет ноутбука немного сложнее, чем просто создание кадра. Для одной вещи, когда используете ноутбук, вы обычно придерживаетесь нескольких панелей. Это может быть запутано, если ваши панели комплексны. Таким образом, мы посмотрим, как создать простой ноутбук и немного более сложной версии. Давайте начнем с простого первого. Если вы хотите следовать, открыть XRCED и посмотрите, можете ли вы скопировать макет на скриншоте ниже:

Трюк для добавления страниц к вашей записной книжке в XRCED заключается в том, что вам нужно выбрать дочернюю панель и выбрать вкладку NotebookPage, которая отображается справа. Там вы можете установить этикетки для вкладок. Давайте посмотрим на сгенерированный XML:

XML? WxVertical Tabone. табтво 1 wxall | wxexpand. 5 XRC Notebook Demo.

Это почти так же, как код, который мы видели ранее. Обратите внимание, что мы можем встроить флаги Sizer в сам XML (например, WXALL | WX.EXPAND). Это довольно аккуратно! Код для загрузки этого ноутбука практически точно так же, как код, который мы использовали для диалогового окна входа в систему ранее:

# notebookXrcDemo.py
import wx
from wx import xrc

class MyApp(wx.App):
    def OnInit(self):
        self.res = xrc.XmlResource("notebook2.xrc")
        
        self.frame = self.res.LoadFrame(None, 'DemoFrame')
        
        self.frame.Show()
        return True
        
if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

Единственные различия здесь – имена кадра и файл XRC. Теперь давайте перейдем к нашу чуть более сложный пример ноутбука. В этом примере мы создадим блокнот XRC файла и две файлы XRC панели, которые мы можем использовать в качестве вкладок для ноутбука. Наш новый XML ноутбук в значительной степени похож на старый, поэтому мы пропустим это. Вместо этого мы посмотрим на наш код Python вместо этого:

# notebookXrcDemo2.py
import wx
from wx import xrc

class MyApp(wx.App):
    def OnInit(self):
        res = xrc.XmlResource("notebook.xrc")
        frame = res.LoadFrame(None, "DemoFrame")
        panel = xrc.XRCCTRL(frame, "DemoPanel")
        notebook = xrc.XRCCTRL(panel, "DemoNotebook")
        
        # load another xrc file
        res = xrc.XmlResource("panelOne.xrc")
        tabOne = res.LoadPanel(notebook, "panelOne")
        notebook.AddPage(tabOne, "TabOne")
        
        # load the last xrc file
        res = xrc.XmlResource("panelTwo.xrc")
        tabTwo = res.LoadPanel(notebook, "panelTwo")
        notebook.AddPage(tabTwo, "tabTwo")
        
        frame.Show()
        return True
        
if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

Здесь мы просто извлекаем объекты рамки, панели и ноутбуки из первого файла XRC и используем их в качестве нашей основы для добавления других элементов управления. Загрузка двух других панелей является CINCH, так как мы просто делаем то, что мы сделали, чтобы загрузить оригинальную панель. Затем мы добавляем наши новые панели в ноутбук, используя знакомую методологию AddPage. Как только это сделано, мы показываем кадр, и мы закончили! Вторая панель имеет пустой listctrl в нем, и когда я впервые создал его, я продолжал получать сообщения об ошибках, потому что я забыл установить свой стиль. Убедитесь, что вы говорите, что вы хотите, чтобы он был в списке, отчете или одному из его других режимов, или у вас тоже будут проблемы.

Добавление элементов управления за пределами XRC

Одной из проблем с XRC является то, что он поддерживает только небольшое подмножество виджетов. К счастью, есть способы «преподавать» XRC, как использовать новые элементы управления, но это за пределами объема этой вводной статьи. Вместо этого я покажу вам, как добавить элементы управления за пределами XRC. Концепция такая же, как использование обычных виджетов, поэтому это действительно легко понять. На самом деле, мы собираемся взять второй пример ноутбука и добавить пластину к нему:

# notebookXrcDemo3.py

import wx
from wx import xrc
import wx.lib.platebtn as platebtn

class MyApp(wx.App):
    def OnInit(self):
        self.res = xrc.XmlResource("notebook2.xrc")
        
        frame = self.res.LoadFrame(None, 'DemoFrame')
        panel = xrc.XRCCTRL(frame, "DemoPanel")
        notebook = xrc.XRCCTRL(panel, "DemoNotebook")
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        btn = platebtn.PlateButton(panel, label="Test", style=platebtn.PB_STYLE_DEFAULT)
        sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
        sizer.Add(btn)
        panel.SetSizer(sizer)
        
        frame.Show()
        return True
        
if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

Обратите внимание, что все, что нам нужно было сделать, было взять виджет панели XRC и сделать его родительским плиткуттоном. Затем мы добавили ноутбук и кнопку в вертикально ориентированную Sizer. Теперь мы знаем, как объединить обычные виджеты с виджетами XRC в наших приложениях. Я надеюсь, что вы многое узнали из этой статьи и найдут его полезным в своей работе.

Дальнейшее чтение

Загрузки

  • xrc_intro.zip
  • xrc_intro.tar.tar.tar