Для большей конкретности рассмотрим очень бегло несколько простых сценариев, добавляющих интерфейс на основе tkinter к клиентской стороне программы getfile. Все эти примеры предполагают, что серверная часть getfile уже запущена, — они просто добавляют графический интерфейс к клиентской стороне программы, облегчающий загрузку файла с сервера. Первый из них, представленный в примере 12.18, создает диалоговое окно для ввода данных о сервере, порте и имени файла, используя приемы конструирования форм, с которыми мы встречались в главах 8 и 9, а потом строит соответствующую команду getfile и выполняет ее с помощью функции os.system, рассматривавшейся во второй части книги.
Пример 12.18. PP4E\Internet\Sockets\getfilegui-1.py
запускает сценарий getfile в режиме клиента из простого графического интерфейса на основе tkinter;
точно так же можно было бы использовать os.fork+exec, os.spawnv (смотрите модуль Launcher);
в windows: замените ‘python‘ на ‘start‘, если каталог
с интерпретатором не перечислен в переменной окружения PATH;
import sys, os
from tkinter import *
from tkinter.messagebox import showinfo
def onReturnKey():
cmdline = (‘python getfile.py -mode client -file %s -port %s -host %s’ %
(content[‘File’].get(),
content[‘Port’].get(),
content[‘Server’].get()))
os.system(cmdline)
showinfo(‘getfilegui-1’, ‘Download complete’)
box = Tk()
labels = [‘Server’, ‘Port’, ‘File’]
content = {}
for label in labels:
row = Frame(box)
row.pack(fill=X)
Label(row, text=label, width=6).pack(side=LEFT)
entry = Entry(row)
entry.pack(side=RIGHT, expand=YES, fill=X) content[label] = entry
box.title(‘getfilegui-1’)
box.bind(‘<Return>’, (lambda event: onReturnKey())) mainloop()
Если запустить этот сценарий, он создаст форму, изображенную на рис. 12.1. Нажатие клавиши Enter запускает экземпляр программы getfile в режиме клиента. Когда сгенерированная команда вызова get— file завершается, появляется окно подтверждения, изображенное на рис. 12.2.
7*i getfilegui-1
Server |
localhost |
Port |
50001 |
File |
testdir\ora-lp4.gif |
Рис. 12.1. Сценарий getfilegui-1 в действии
Рис. 12.2. Окно подтверждения getfilegui-1
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011