Сценарий PyGadgets запускает часть тех же программ, что и PyDemos, но для практического использования, а не как кратковременные демонстрации. Оба сценария отображают панель с кнопками и запускают программы с помощью модуля launchmodes, но сценарий PyGadgets немного проще, потому что его задача более узкая. Кроме того, сценарий PyGadgets поддерживает два режима запуска — он может сразу запустить одновременно все программы из списка или вывести графический интерфейс для запуска каждой программы отдельно. На рис. 10.19 изображен графический интерфейс в виде панели с кнопками для запуска программ по отдельности. Сценарии PyGadgets и PyDemos могут выполняться одновременно, и оба позволяют изменять размеры окна (попробуйте сами, чтобы увидеть, как это делается).
Рис. 10.19. Панель запуска PyGadgets
Из-за этих различий построение графического интерфейса в сценарии PyGadgets в большей мере основывается на данных: он сохраняет имена программ в списке и просматривает его при необходимости, а не проходит по последовательности заранее запрограммированных вызовов функции demoButton. Например, набор кнопок в панели запуска на рис. 10.19 целиком зависит от содержимого списка программ.
Программный код этого графического интерфейса приводится в примере 10.31. Его объем невелик, потому что опирается на использование других модулей, которые мы написали ранее, и осуществляющих большую часть его действий: launchmodes — для запуска программ, LaunchBrowser — для запуска веб-броузера, windows — для переопределения ярлыков и реализации операции завершения. На рабочем столе моего компьютера я создал ярлык для PyGadgets, и его окно практически всегда открыто у меня. С его помощью я легко получаю доступ к повседневно используемым инструментам — текстовым редакторам, калькуляторам, электронной почте, средствам обработки изображений и так далее, которые все встретятся нам в будущих главах.
Для настройки PyGadgets под собственные нужды просто импортируйте и вызывайте его функции через свои списки команд, запускающих программы, или измените список mytools вызываемых программ, который находится ближе к концу файла. В конце концов, это Python.
Пример 10.31. PP4E\PyGadgets.py
############################################################################## Запускает различные примеры; запускайте сценарий при загрузке системы, чтобы сделать их постоянно доступными.
Этот файл предназначен для запуска программ, действительно необходимых в работе; для запуска демонстрационных программ Python/Tk и получения дополнительных сведений о параметрах запуска программ обращайтесь к сценарию PyDemos. Замечание о работе в Windows: это файл с расширением ‘.py’, поэтому при его запуске щелчком мыши выводится окно консоли, которое используется для вывода начального сообщения (включая 10-секундную паузу, чтобы обеспечить его видимость, пока запускаются приложения). Чтобы избежать вывода окна консоли, запускайте сценарий с помощью программы ‘pythonw’ (а не ‘python’), используйте расширение ‘.pyw’, в свойствах ярлыка в Windows выберите значение ‘Свернутое в значок’ (‘run minimized’) в поле ‘Окно’ (‘Window’) или запускайте файл из другой программы (см. PyDemos).
##############################################################################
import sys, time, os, time
from tkinter import *
from launchmodes import PortableLauncher # повторное использ. класса запуска from Gui.Tools.windows import MainWindow # повторное использ. оконных
# инструментов: ярлык, обработчик
# закрытия окна def runImmediate(mytools):
немедленный запуск программ
print(‘Starting Python/Tk gadgets…’) # вывод в stdout (временный)
for (name, commandLine) in mytools:
PortableLauncher(name, commandLine)() # сразу вызвать для запуска print(‘One moment please…’) if sys.platform[:3] == ‘win’: # windows: закрыть консоль через
for i in range(10): # 10 секунд
time.sleep(1); print(‘.’ * 5 * (i+1))
def runLauncher(mytools):
создать простую панель запуска для использования в дальнейшем
root = MainWindow(‘PyGadgets PP4E’) # или root = Tk() for (name, commandLine) in mytools:
b = Button(root, text=name, fg=’black’, bg=’beige’, border=2, command=PortableLauncher(name, commandLine))
b.pack(side=LEFT, expand=YES, fill=BOTH) root.mainloop()
mytools = [
(‘PyEdit’, ‘Gui/TextEditor/textEditor.py’),
(‘PyCalc’, ‘Lang/Calculator/calculator.py’),
(‘PyPhoto’, ‘Gui/PIL/pyphoto1.py Gui/PIL/images’),
(‘PyMail’, ‘Internet/Email/PyMailGui/PyMailGui.py’), (‘PyClock’, ‘Gui/Clock/clock.py -size 175 -bg white’
‘ -picture Gui/gifs/pythonPowered.gif’), (‘PyToe’, ‘Ai/TicTacToe/tictactoe.py’
‘ -mode Minimax -fg white -bg navy’), (‘PyWeb’, ‘LaunchBrowser.pyw’
‘ -live index.html learning-python.com’)]
#’ -live PyInternetDemos.html localhost:80’)]
#’ —file’)] # PyInternetDemos предполагает, что
# локальный веб-сервер уже запущен
if __name__ == ‘__main__’:
prestart, toolbar = True, False if prestart:
runImmediate(mytools)
if toolbar:
runLauncher(mytools)
По умолчанию сценарий PyGadgets сразу запускает все программы из списка. Чтобы запустить PyGadgets в режиме панели, в примере 10.32 импортируется и вызывается соответствующая функция с импортированным списком программ. Так как этот файл имеет расширение .pyw, на экране появится только графический интерфейс панели запуска — окно консоли открываться не будет. Это отлично подходит для повседневного использования, но не годится для случаев, когда желательно просматривать сообщения об ошибках (используйте расширение .py).
Пример 10.32. PP4E\PyGadgets_bar.pyw
запускает только панель инструментов PyGadgets — ни одна другая программа при этом не запускается; расширение файла предотвращает появление окна консоли в Windows: используйте расширение ‘.py’, чтобы видеть сообщения, выводимые в консоль;
import PyGadgets
PyGadgets.runLauncher(PyGadgets.mytools)
Этот сценарий — тот самый файл, на который ссылается ярлык на моем рабочем столе: я предпочитаю запускать приложения по мере необходимости. Создать ярлык и тем самым упростить возможность запуска можно на многих платформах. Такой сценарий можно выполнять и при загрузке системы, чтобы сделать его постоянно доступным (и сэкономить на щелчке мышью). Например, в Windows такой сценарий автоматически запускается при добавлении его в папку Автозагрузка (Statrup), а в Unix и в Unix-подобных системах можно автоматически запускать этот сценарий из командной строки в сценариях запуска, после запуска XWindow.
Каким бы способом ни был запущен сценарий PyGadgets — щелчком на ярлыке или на имени файла в проводнике по файловой системе, с помощью командной строки или иным образом, — появляется панель запуска, показанная в центре рис. 10.20.
Конечно, основное назначение сценария PyGadgets состоит в том, чтобы запускать другие программы. При нажатии на кнопки запускаются программы, показанные на рис. 10.20, и если вы хотите узнать о них больше, переверните страницу и перейдите к следующей главе.