Клиенты, использующие реализацию этого калькулятора, получаются такие же простые, как сам калькулятор. Как и большинство графических интерфейсов на основе классов из библиотеки tkinter, данный интерфейс может быть расширен в подклассах — класс в примере 19.18 переопределяет конструктор простого калькулятора для вставки новых графических элементов.
Пример 19.18. PP4E\Lang\Calculator\calc0ext.py
from tkinter import *
from calc0 import CalcGui
class Inner(CalcGui): # расширенный графический интерфейс
def __init__(self):
CalcGui.__init__(self)
Label(self, text=’Calc Subclass’).pack() # добавить после
Button(self, text=’Quit’, command=self.quit).pack() # подразумевается # позиция top
Inner().mainloop()
Возможно встраивание калькулятора в класс контейнера — в примере 19.19 к общему родителю прикрепляются пакет виджетов простого калькулятора и дополнительные элементы.
Пример 19.19. PP4E\Lang\Calculator\calc0emb.py
from tkinter import *
from calc0 import CalcGui # добавить родителя, без вызовов владельца
def __init__(self, parent): # встроить интерфейс
Label(parent, text=’Calc Attachment’).pack() # side=top CalcGui(parent) # добавить фрейм калькулятора
Button(parent, text=’Quit’, command=parent.quit).pack()
root = Tk()
Outer(root)
root.mainloop()
На рис. 19.3 показан результат запуска обоих сценариев, представленных выше, из различных командных строк. Оба имеют отдельное поле ввода вверху. Все работает, но чтобы увидеть более практическое применение такой техники повторного использования, нужно также сделать более реальным лежащий в основе калькулятор.
![]() |
|||
![]() |
|||
|
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011