Независимые окна

nezavisimye okna Экскурсия по tkinter, часть 1

Когда есть набор классов компонентов, реализованных в виде фреймов, годится любой родительский элемент — и фреймы, и новые окна верхнего уровня. В примере 8.33 все четыре объекта демонстрационных панелей прикрепляются к собственным независимым окнам Toplevel, а не к одному и тому же контейнеру.

Пример 8.33. PP4E\Gui\Tour\demoAll-win.py

4 демонстрационных класса в независимых окнах верхнего уровня;

не процессы: при завершении одного щелчком на кнопке Quit завершаются все остальные, потому что все окна выполняются в одном и том же процессе; здесь первое окно Tk создается вручную, иначе будет создано пустое окно

from tkinter import *

demoModules = [‘demoDlg’, ‘demoRadio’, ‘demoCheck’, ‘demoScale’]

def makePopups(modnames):

demoObjects = []

for modname in modnames:

module = __import__(modname) # импортировать по имени в виде строки window = Toplevel() # создать новое окно

demo = module.Demo(window) # родительским является новое окно window.title(module.__name__)

demoObjects.append(demo)

return demoObjects

def allstates(demoObjects):

for obj in demoObjects:

if hasattr(obj, ‘report’):

print(obj.__module__, end=’ ‘)

obj.report()

root = Tk() # явно создать корневое окно

root.title(‘Popups’)

demos = makePopups(demoModules)

Label(root, text=’Multiple Toplevel window demo’, bg=’white’).pack()

Button(root, text=’States’, command=lambda: allstates(demos)).pack(fill=X) root.mainloop()

Мы уже встречались с классом Toplevel — каждый его экземпляр создает на экране новое окно. Получаемый результат изображен на рис. 8.34 — каждая демонстрационная панель выполняется не в общем, а в собственном окне.


Scale demos

 

Pick demo number

 

Multiple loplevel window deme

 

Рис. 8.34. demoAll_win: новые окна Toplevel

 


 

Главное корневое окно на этом рисунке находится в левом нижнем углу. На нем есть кнопка States, которая вызывает метод report каждого демонстрационного объекта, выводя в stdout примерно такой текст:

C:\…\PP4E\Gui\Tour> python demoAll_win.py in onMove 0 in onMove 0 in onMove 1 you pressed Open result: C:/Users/mark/Stuff/Books/4E/PP4E/dev/Examples/PP4E/Launcher.py demoRadio Open demoCheck 1 1 0 0 0 demoScale 1

Как было показано ранее в этой главе, окна Toplevel функционируют независимо друг от друга, но в действительности они не являются отдельными программами. Закрытие любого из окон на рис. 8.34 щелчком на кнопке X в правом верхнем углу закрывает только это окно. Но попытка закрыть окно щелчком на кнопке Quit или на кнопке X в главном окне закроет их все и завершит все приложение, потому что все они выполняются в одном и том же программном процессе. В некоторых приложениях это приемлемо, но не во всех. Чтобы обеспечить настоящую независимость, необходимо порождать дочерние процессы, как показано в следующем разделе.

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

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