Upload
it-people
View
117
Download
5
Embed Size (px)
Citation preview
• GUI приложение с нуля • Сопровождение легаси кода • Портирование легаси
Применимость доклада
В рамках работы:
Вне работы:• Персональные проекты
• Быстрая разработка • Компактность кода • Мультиплатформенность • Зрелая экосистема
Преимущества разработки на Python
• Небольшой размер• Нетребовательность к ресурсам
• Нативный вид• Системная интеграция
ТРЕБОВАНИЯК КРОССПЛАТФОРМЕННОМУ
GUI ПРИЛОЖЕНИЮ
Три независимых проекта, использующих платформенно-специфические биндинги:
• на Windows - pywin32 • на MacOS X - PyObjC • на Linux - PyGtk
Самый надежный путь, но при этом самый затратный
Казалось бы, что может быть проще? Правильно выбранный тулкит и
мультиплатформенное приложение готово!
Код на WAL
Код на wxpython
panel = wx.Panel() vbox = wx.BoxSizer(wx.VERTICAL) btn = wx.Button(panel, -1, "click Me") vbox.Add(btn, 0, wx.ALIGN_CENTER) btn.Bind(wx.EVT_BUTTON, self.OnClicked)
panel = wal.VPanel()btn = wal.Button(panel, "click Me", onclick=self.on_clicked)panel.pack(btn)
Код класса wal.Button
class Button(wx.Button, WidgetMixin):callback = None
def __init__(self, parent, text, size=DEF_SIZE,onclick=None, tooltip='', default=False, pid=wx.ID_ANY):
wx.Button.__init__(self, parent, pid, text, size=size)if default: self.SetDefault()if onclick:
self.callback = onclickself.Bind(wx.EVT_BUTTON, self.on_click, self)
if tooltip: self.SetToolTipString(tooltip)
def set_default(self):self.SetDefault()
def on_click(self, event):if self.callback: self.callback()
• Кроссплатформенность • Кроссвиджетсетность и кроссверсионность
• Код приложения не завязан на UI • Сокращение объема кода • Стиль кода по PEP-8 • Улучшение читабельности кода
Преимущества паттерна WAL
PyGtk
Логика приложения
Widgetset AbstractionLayer (WAL)
TkinterTkinter
Упрощенный вариантмультиплатформенного приложения
PyObjC pywin32 PyGtk
Вариант создания полноценного мультиплатформенного приложения
Логика приложения
Widgetset AbstractionLayer (WAL)