##master-page:VMSHClassTemplate ##master-date:Unknown-Date #format wiki #language ru = GUI: принципы организации. GUI+PyGame? = * Асинхронная организация GUI: * собственные обработчики событий * «корневое окно» как источник внешнего mainloop * обратный вызов процедур * Сложности программирования GUI: * Очень много настроек (геометрия, цвета и картинки, варианты поведения…) * Невозможно совместить ''два'' верхних mainloop (например, Tk и !PyGame) * Пример организации GUI на !PyGame: [[https://launchpad.net/simplegc|Simple Game Code]] === Домашнее задание === 1. {i} Посмотреть [[http://program.sambull.org/sgc/|документацию по SGC]] и примеры из состава дистрибутива (каталог `examples` в архиве) 1. Научиться запускать примеры (должен срабатывать оператор `import sgc`): * ''Вариант 1'': скопировать каталог `sgc` из архива в каталог с примерами (то же самое для собственных программ) * ''Вариант 2'': установить модуль командой `python setup.py install` после распаковки архива 1. Модифицировать [[attachment:LecturesVMSH/Python/2014-01-31/2014-01-31-grafun.py|программу рисования графика произвольной функции]] так, чтобы она использовала `sgc` * Обратите внимание, что «классический» диалог ввода состоит минимум из ''двух'' виджетов: текстовой строки (label, для «подсказки») и поля текстового ввода (input), но в SGC виджет `InputBox` включает в себя оба. * Ещё обратите внимание на то, что в SGC вместо `pygame.display.set_mode()` вызывается `sgc.surface.Screen()`; при этом результат `set_mode()` (`surface` для рисования) помещается в поле `image` создаваемого объекта. Таким образом, вместо {{{ screen = pygame.display.set_mode(size) }}} надо использовать что-то вроде {{{ root = sgc.surface.Screen(size) screen = root.image }}} * [[attachment:2014-03-07-grafun-sgc.py]] 1. Модифицировать ещё какую-нибудь программу, требующую ввода. 1. Что-то украшения кнопок не очень красиво в SGC выглядят… Может, их улучшить? Кода-то не слишком-то много, а кусок, отвечающий за рисование рамочек и стенок, в каждом виджете вообще небольшой. * [[attachment:sgcradio.py]] ==== Условные обозначения ==== . {o} — тема по Linux . ­— тема повышенной сложности . {i} — теоретическое задание . {*} — тема для самостоятельного изучения ---- CategoryClass CategoryVmsh