Бесплатные дизайнеры интерфейсов для wxPython. Часть 2 | jenyay.net

Бесплатные дизайнеры интерфейсов для wxPython. Часть 2

Эта статья является продолжением обзора бесплатных программ для создания интерфейсов для библиотеки wxPython. Первая часть находится по адресу Softreview.WxDesigner.

FarPy

Сайт программы - http://farpy.holev.com/index.php
Версия на момент написания обзора - 0.5.5 от 14 апреля 2007
Поддерживаемые языки и библиотеки: wxPython, wxRuby, wxPerl, IronPython
Требования: .NET Framework 2.0
Лицензия: GPL
Поддерживаемые ОС: Windows

farpy.png: 653x747, 25k (30.05.2012 10:00)

Отличительной особенностью этой программы является то, что интерфейс строится не на основе сайзеров, а с помощью задания абсолютных координат контролов. Отсюда следуют все преимущества и недостатки. Преимущества - не надо задумываться о том как составить интерфейс из вложенных сайзеров, какие типы сайзеров надо использовать и какие устанавливать свойства, чтобы получить нужное расположение элементов. А недостаток такого метода состоит в том, что элементы остаются привязанными к левому верхнему углу окна или панели. Для примера я приведу код, сгенерированный программой FarPy для диалога, который показан на следующем скриншоте.

# -*- coding: utf-8 -*-
# Created with FarPy GUIE v0.5.5

import wx
import wx.calendar

class MyFrame(wx.Frame):       
        def __init__(self, parent, title):
                wx.Frame.__init__(self, parent, -1, 'form title', wx.DefaultPosition, (405, 121), style=wx.CLOSE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.RESIZE_BORDER | 0 | 0 | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
                self.panel = wx.Panel(self, -1)

                self.button2 = wx.Button(self.panel, -1, 'button', (232,48), (75, 23))
                self.button2.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, 'Microsoft Sans Serif'))
                self.button2.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))

                self.button4 = wx.Button(self.panel, -1, 'button', (312,48), (75, 23))
                self.button4.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, 'Microsoft Sans Serif'))
                self.button4.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))

                self.label1 = wx.StaticText(self.panel, -1, 'Text', (8,24), (100, 23))
                self.label1.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, 'Microsoft Sans Serif'))
                self.label1.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))

                self.combobox1_list = ['']
                self.combobox1 = wx.ComboBox(self.panel, -1, 'combobox', (133,21), (250, 21), self.combobox1_list)
                self.combobox1.SetBackgroundColour(wx.Colour(255, 255, 255))
                self.combobox1.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, 'Microsoft Sans Serif'))
                self.combobox1.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))


#---------------------------------------------------------------------------
class MyApp(wx.App):
        def OnInit(self):
                frame = MyFrame(None, 'App')
                frame.Show(True)
                self.SetTopWindow(frame)
                return True

app = MyApp(True)
app.MainLoop()

Не понятны перспективы этой программы. Если верить плану работ на сайте (http://farpy.holev.com/guie_roadmap.php), то версия 1.0 должна была выйти еще в 2006 году, однако проект похоже скорее жив, чем мертв, потому что дата релиза последней версии (0.5.5) относится к апрелю этого (2007-го) года. Так же на сайте можно скачать архив с исходниками, правда версии 0.5.2. Судя по плану работ поддержки сайзеров в ближайшее время ждать не приходится, что, конечно, жаль, но планируется еще наращивать число поддерживаемых языков.

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

XRCed

Сайт программы - http://xrced.sourceforge.net
Версия на момент написания обзора - 0.1.8.4 от 10 марта 2007
Поддерживаемые языки и библиотеки: wxPython, XRC
Требования: требуется установленный Python 2.2 и выше
Лицензия: Open source
Поддерживаемые ОС: кроссплатформенная программа

xrced.png: 799x667, 28k (30.05.2012 10:00)

В отличие от рассмотренных ранее дизайнеров, XRCed, как уже можно догадаться из названия, предназначен для визуального редактирования интерфейса в формате XRC. В качестве результата работы этой программы мы получаем два файла - файл в формате XRC (разновидность XML) и скрипт на Python, который создает класс окна на основе этого ресурса. Ресурс XRC может быть также вставлен внутрь скрипта. Для XRCed файл ресурсов в формате XRC является родным, т.е. Вы можете открывать этой программой ресурсы в соответствующем формате, файл для которого был создан другой программой.

Пример скрипта (без ресурсов), созданного программой, можете увидеть на следующем листинге. А полностью созданный набор (скрипт + ресурс + конфиг) Вы можете скачать по этой ссылке - Attach:xrced_sample.zip.

# This file was automatically generated by pywxrc, do not edit by hand.
# -*- coding: UTF-8 -*-

import wx
import wx.xrc as xrc

__res = None

def get_resources():
    """ This function provides access to the XML resources in this module."""
    global __res
    if __res == None:
        __init_resources()
    return __res


class xrcFRAME1(wx.Frame):
    def PreCreate(self, pre):
        """ This function is called during the class's initialization.

        Override it for custom setup before the window is created usually to
        set additional window styles using SetWindowStyle() and SetExtraStyle()."""

        pass

    def __init__(self, parent):
        # Two stage creation (see http://wiki.wxpython.org/index.cgi/TwoStageCreation)
        pre = wx.PreFrame()
        self.PreCreate(pre)
        get_resources().LoadOnFrame(pre, parent, "FRAME1")
        self.PostCreate(pre)

        # Define variables for the controls
        self.Combo = xrc.XRCCTRL(self, "Combo")



# ------------------------ Resource data ----------------------

def __init_resources():
    global __res
    __res = xrc.EmptyXmlResource()

    __res.Load('test.xrc')

Работа в программе XRCed представляет собой заполнение дерева, узлы которого представляют собой виджеты (контролы), а также установка их свойств. Говоря о недостатках, приходится сказать, что, к сожалению, во время создания диалога, его размер показывался не таким, каким он становился во время запуска скрипта непосредственно из командной строки. С чем это связано не понятно, но в принципе, и с такой неприятностью можно вполне работать.

Имеющиеся виджеты Вы можете увидеть на скриншоте на левой панели. Там же расположены и сайзеры. Интересной возможностью программы является возможность перемещения узлов дерева по иерархии. Программа распространяется в виде архива со скриптами, написанными, разумеется, на Python.

Часть 3