Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr

201 views

Published on

Выступление на PYCON RUSSIA 2017

Published in: Internet
  • Be the first to comment

  • Be the first to like this

«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr

  1. 1. - почем опиум для народа? (с) Остап Бендер Write once run anywhere
  2. 2. • GUI приложение с нуля • Сопровождение легаси кода • Портирование легаси Применимость доклада В рамках работы: Вне работы: • Персональные проекты
  3. 3. • Быстрая разработка • Компактность кода • Мультиплатформенность • Зрелая экосистема Преимущества разработки на Python
  4. 4. • Медленный runtime у Python Отрицательные стороны разработки на Python
  5. 5. Пример сложного десктопного приложения на Python
  6. 6. Основные десктопные системы MacOS Windows Linux
  7. 7. • Небольшой размер • Нетребовательность к ресурсам • Нативный вид • Системная интеграция ТРЕБОВАНИЯ К КРОССПЛАТФОРМЕННОМУ GUI ПРИЛОЖЕНИЮ
  8. 8. Виджетсеты платформ Carbon/Cocoa WinAPI Gtk+/Qt
  9. 9. Биндинги к Python PyObjC pywin32 PyGtk PyQt/PyKDE
  10. 10. Python как основа для кроссплатформенных приложений
  11. 11. Три независимых проекта, использующих платформенно-специфические биндинги: • на Windows - pywin32 • на MacOS X - PyObjC • на Linux - PyGtk Самый надежный путь, но при этом самый затратный
  12. 12. Казалось бы, что может быть проще? Правильно выбранный тулкит и мультиплатформенное приложение готово!
  13. 13. • Tkinter • PyQt • PyGtk • wxpython МУЛЬТИПЛАТФОРМЕННЫЕ ТУЛКИТЫ
  14. 14. Tkinter PyQt PyGtk wxpython
  15. 15. Look & Feel для Tkinter на Linux платформе
  16. 16. "Что делать?" (с) и кто виноват :)
  17. 17. WX 3.0 WX 3.0 WX 2.8
  18. 18. WX 3.0 WX 3.0 WX 2.8 Получившаяся архитектура sK1 Приложение sK1 Widgetset Abstraction Layer (WAL)
  19. 19. Код на 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)
  20. 20. Код класса 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 = onclick self.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()
  21. 21. • Кроссплатформенность • Кроссвиджетсетность и кроссверсионность • Код приложения не завязан на UI • Сокращение объема кода • Стиль кода по PEP-8 • Улучшение читабельности кода Преимущества паттерна WAL
  22. 22. Паттерн WAL в контексте поддержки легаси кода
  23. 23. PyGtk 2.8 КОД ПРИЛОЖЕНИЯ
  24. 24. PyGtk 2.8 КОД ПРИЛОЖЕНИЯ PyGtk 2.8 КОД ПРИЛОЖЕНИЯ WAL
  25. 25. Gtk 3 КОД ПРИЛОЖЕНИЯ WAL PyGtk 2.8 КОД ПРИЛОЖЕНИЯ WAL
  26. 26. Qt 5 КОД ПРИЛОЖЕНИЯ WAL PyGtk 2.8 КОД ПРИЛОЖЕНИЯ WAL
  27. 27. PyGtk Логика приложения Widgetset Abstraction Layer (WAL) TkinterTkinter Упрощенный вариант мультиплатформенного приложения
  28. 28. PyObjC pywin32 PyGtk Вариант создания полноценного мультиплатформенного приложения Логика приложения Widgetset Abstraction Layer (WAL)
  29. 29. Разработка унифицированных абстракционных слоев для всех платформ
  30. 30. Спасибо за внимание! И какие есть вопросы?

×