Бесплатные дизайнеры интерфейсов для 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 для диалога, который показан на следующем скриншоте.
# 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, как уже можно догадаться из названия, предназначен для визуального редактирования интерфейса в формате XRC. В качестве результата работы этой программы мы получаем два файла - файл в формате XRC (разновидность XML) и скрипт на Python, который создает класс окна на основе этого ресурса. Ресурс XRC может быть также вставлен внутрь скрипта. Для XRCed файл ресурсов в формате XRC является родным, т.е. Вы можете открывать этой программой ресурсы в соответствующем формате, файл для которого был создан другой программой.
Пример скрипта (без ресурсов), созданного программой, можете увидеть на следующем листинге. А полностью созданный набор (скрипт + ресурс + конфиг) Вы можете скачать по этой ссылке - Attach:xrced_sample.zip.
# -*- 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.