Несколько окон

neskolko okon Примеры законченных программ с графическим интерфейсом

Редактор PyEdit способен выводить не только множество окон специального назначения, он также позволяет одновременно открывать несколько окон редактирования — в пределах одного процесса или за счет запуска независимых экземпляров программы. Для иллюстрации на рис. 11.3 показаны три независимо выполняющиеся экземпляра PyEdit с различными размерами, цветовыми схемами и шрифтами. Поскольку все они были запущены как независимые программы, закрытие одной из них не оказывает влияния на другие. На этом рисунке внизу видны также оторванные меню PyEdit и всплывающее окно диалога справки справа. Фоном окон редактирования служат оттенки зеленого, красного и голубого цветов — для установки желаемого цвета выберите в меню Tools элемент Pick.

Рис. 11.3. Несколько окон PyEdit, открытых одновременно

 

Так как во всех этих трех сеансах PyEdit редактируется программный код на языке Python, их содержимое можно выполнить, выбрав пункт Run Code раскрывающегося меню Tools. Программный код из файлов выполняется независимо — стандартные потоки ввода-вывода программного кода, выполняемого не из файла (например, полученные из самого
текстового виджета), отображаются в окно консоли сеанса PyEdit. Это никоим образом нельзя рассматривать, как IDE (интегрированную среду разработки), — я добавил эту возможность только потому, что она показалась мне полезной. Очень удобно иметь возможность запускать редактируемый программный код, не разыскивая его в дереве каталогов.

Чтобы открыть несколько окон редактирования в пределах одного процесса, используйте пункт Clone в меню Tools, при выборе которого открывается новое пустое окно без уничтожения содержимого в другом окне. На рис. 11.4 показана ситуация, когда в одном процессе открыты два окна, наряду со всплывающими окнами, имеющими отношение к пункту Grep меню Search, о котором рассказывается в следующем разделе, — который позволяет произвести обход дерева каталогов в параллельных потоках выполнения, отобрать файлы с именами, соответствующими шаблону и содержащими искомую строку, и открыть их. На рис. 11.4 видно, что выбор пункта Grep меню выводит диалог ввода, список файлов, удовлетворяющих критериям поиска и новое окно PyEdit, открытое и позиционированное после двойного щелчка на файле в списке.


C:\Python31\Lib\ast.py@95 [

 

74 PyEdit grep

 

‘■РУ

 

■\ShellGui\packdlg,py@12 [ var2 = makeFormRowjwin, label=’Files to pack)

 

Content encoding? Latin-1

.\ShellGui\unpkdlg.py@5 [from formrows import makeFormRow # .\ShellGui\unpkdlg.py@10 [ var = makeFormRow(win, label=lnput file', wk .\TextEditor\textEditor.py@617 [ from PP4E.Gui.ShellGui.form rows impoi

,.\TextEditor\textEditor.py@622 [ varl = makeFormRowfpopup, label-'D * |

74 PyEdit - grep matches: 'makeFormRow' (utf-8; .\ShellGui\formrows.py@10 [def makeFormRow(parent, label, width=15, bro. .\ShellGui\packdlg.py@6 [from formrows import makeFormRow # i .\ShellGui\packdlg.py@ll [ varl = makeFormRow(win, label='Outputfile'y

74 PyEdit - grep matches:' %' (Latin-1) | g || l°] || 83 |

C:\Python31\Lib\abc.py@lll [

C:\Python31\Lib\abc.py@112 (

C:\Python31\Lib\abc.py@116 [

printCCIass: %s,%s"1 A | printf'Inv. counter: % print("%s: %r" a/

C:\Python31\Lib\antigravity,py@16 [ p, q = [('%f' % fk

C:\Python31\Lib\antigravity,py@17 [ print('%d%s %d^

rv

74 PyEdit 2.1 grep mater File Edit Search Too

подпись: 74 pyedit 2.1
file edit search tools help
подпись: 74 pyedit 2.1 grep mater file edit search too
подпись: 74 pyedit - grep matches: 'makeformrow' (utf-8; .\shellgui\formrows.py@10 [def makeformrow(parent, label, width=15, bro. .\shellgui\packdlg.py@6 [from formrows import makeformrow # i .\shellgui\packdlg.py@ll [ varl = makeformrow(win, label='outputfile'y
подпись: 74 pyedit - grep
directory root?
filename pattern?
search string?
content encoding?
подпись: .\shellgui\unpkdlg.py@5 [from formrows import makeformrow # .\shellgui\unpkdlg.py@10 [ var = makeformrow(win, label=lnput file', wk .\texteditor\texteditor.py@617 [ from pp4e.gui.shellgui.form rows impoi
,.\texteditor\texteditor.py@622 [ varl = makeformrowfpopup, label-'d * |


 

Рис. 11.4. Множество окон PyEdit в рамках единственного процесса

В процессе выполнения операций, предусмотренных пунктом Grep меню, на экране появляется еще одно окно, но при этом графический интерфейс остается полностью активным. Фактически вы можете снова выбрать пункт Grep и выполнить еще один поиск, пока другой еще не закончился. Обратите внимание, что диалог Grep также позволяет указывать кодировку символов, которая будет использоваться для декодирования содержимого всех текстовых файлов, просматриваемых в процессе поиска. Подробнее о том, как это действует, я расскажу в следующем ниже разделе с описанием изменений, однако в большинстве случаев можно просто использовать системную кодировку по умолчанию.

Ради интереса попробуйте вызвать диалог Grep и выполнить в каталоге C:\Python31 поиск всех файлов *.py, содержащих строку %, чтобы получить представление о том, как часто используется это распространенное выражение форматирования строк в стандартной библиотеке Python 3.1. Разумеется, не все вхождения % будут иметь отношение к форматированию строк, но большинство из них — точно. Согласно сообщениям, выводимым в стандартный поток вывода перед завершением поиска, строка ‘%’ (которая также соответствует целям для подстановки) встречается 6050 раз, а строка ‘ % ‘ (с пробелами вокруг знака процента, чтобы ограничить круг совпадений только оператором форматирования) встречается 3741 раз, включая 130 совпадений, обнаруженных в установленном расширении PIL, — не самый редко используемый инструмент языка! Ниже приводятся сообщения, которые были выведены в стандартный поток вывода в процессе поиска, — совпадения выводятся также в окно списка:

…ошибки могут отличаться от типа кодировки…

Unicode error in: C:\Python31\Lib\lib2to3\tests\data\different_encoding.py Unicode error in: C:\Python31\Lib\test\test_doctest2.py

Unicode error in: C:\Python31\Lib\test\test_tokenize.py Matches for % : 3741

Редактор PyEdit выводит дополнительные всплывающие окна — включая кратковременные диалоги Goto и Find, диалоги выбора цвета, диалоги ввода аргументов и выбора режимов для пункта Run Code меню, и диалоги, запрашивающие имена кодировок символов в файлах при выборе в меню пунктов Open и Save, если редактор настроен так, что он должен запрашивать эти данные (подробнее об этом рассказывается ниже). В интересах экономии места я оставляю исследование большинства других подобных черт поведения за вами.

Существенно обновленный в этом издании и поддерживающий настройки в соответствии с пользовательскими предпочтениями, редактор PyEdit может запрашивать имя кодировки символов при открытии файла, сохранять совершенно новый файл или выполнять операцию Save As. Например, на рис. 11.5 изображен момент, когда я открыл файл, содержащий символы китайского алфавита, и затем снова выбрал в меню пункт Open, чтобы открыть новый файл с текстом на русском языке. Диалог выбора имени кодировки, изображенный на рисунке, появляется сразу же после закрытия стандартного диалога выбора файла, а поле ввода в нем предварительно заполнено именем кодировки по умолчанию (которое определяется явно или берется из настроек платформы). В большинстве случаев можно использовать имя, предлагаемое по умолчанию, если только заранее не известно точно, что символы в файле представлены в другой кодировке.

Вообще говоря, редактор PyEdit поддерживает любые кодировки, которые поддерживаются языком Python и библиотекой tkinter. Текст, который можно видеть на рис. 11.5, например, содержал символы китайского алфавита в специфической кодировке (в кодировке «gb2321», в файле emailpartgb2312). В том же каталоге присутствует тот же текст в альтернативной кодировке UTF-8 (файл emailpartgb2312utf8), который можно открывать в PyEdit и Notepad, используя кодировку по умолчанию, используемую в Windows. Но, чтобы открыть файл в специфической китайской кодировке и получить корректное отображение символов в PyEdit, требуется явно указать имя кодировки (содержимое этого файла абсолютно неправильно отображается в Notepad).

Рис. 11.5. PyEdit отображает китайский текст и запрашивает имя кодировки при открытии файла

 

После того как я ввел имя кодировки для выбранного файла в диалоге на рис. 11.5 koi8-r» — для файла, выбранного в диалоге открытия), редактор PyEdit декодировал и отобразил его содержимое. На рис. 11.6 изображен момент, после того как файл был открыт и я выбрал в меню пункт Save As, — сразу после того как был закрыт диалог выбора файла, редактор вывел новый диалог ввода имени кодировки для нового файла, поле ввода в котором было предварительно заполнено именем кодировки, известным по последним операциям Open или Save. В соответствии с настройками операция Save повторно использует известную кодировку, но операция Save As всегда запрашивает кодировку, чтобы дать возможность указать ее явно для нового файла, прежде чем пытаться использовать умолчания. Подробнее об алгоритмах применения кодировок и интернационализации в PyEdit я буду рассказывать в следующем разделе, при обсуждении изменений в версии 2.1, а пока отмечу, что из-за того, что предпочтения пользователя не могут быть предугаданы, выбор среди алгоритмов поддерживается настройками.

Наконец, когда приходит время завершать работу, редактор PyEdit делает все возможное, чтобы не потерять несохраненные изменения. Когда в любом окне редактирования запрашивается выполнение операции завершения, PyEdit проверяет наличие несохраненных изменений и запрашивает подтверждение. Поскольку в одном и том же процессе может быть открыто несколько окон редактирования, когда операция завершения запрашивается в главном окне, PyEdit проверяет наличие изменений во всех остальных открытых окнах и запрашивает подтверждение, если хотя бы в одном из них будут обнаружены несо- храненные изменения. В противном случае операция завершения будет выполнена без дополнительных вопросов. Попытка выполнить операцию завершения во всплывающем окне редактирования закроет только это окно, то есть никаких проверок между процессами выполняться не будет. При отсутствии изменений операция завершения просто закроет окна графического интерфейса и завершит программу. Другие операции проверяют наличие изменений похожим способом.

Рис. 11.6. PyEdit отображает текст на русском языке и запрашивает кодировку для операции Save As

 

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий