«write once run anywhere — почём опиум для народа?» Игорь...
Post on 22-Jan-2018
117 Views
Preview:
TRANSCRIPT
• 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)
top related