Рис. 19.2. Сценарий calc0 в действии, в Windows 7 (результат=160,283)
Пример 19.17. PP4E\Lang\Calculator\calc0.py
упрощенный графический интерфейс калькулятора: выражение вычисляется с помощью eval/exec
from tkinter import *
from PP4E.Gui.Tools.widgets import frame, button, entry
class CalcGui(Frame):
def __init__(self, parent=None): # расширенный фрейм
Frame.__init__(self, parent) # по умолчанию — верхнего уровня self.pack(expand=YES, fill=BOTH) # все части растягиваются self.master.title(‘Python Calculator 0.1′) # 6 фреймов плюс поле ввода self.master.iconname("pcalc1")
self.names = {} # пространство имен для переменных
text = StringVar()
entry(self, TOP, text)
rows = ["abcd", "0123", "4567", "89()"] for row in rows:
frm = frame(self, TOP)
for char in row:
button(frm, LEFT, char, lambda char=char: text.set(text.get() + char))
frm = frame(self, TOP) for char in "+-*/=": button(frm, LEFT, char, lambda char=char: text.set(text.get()+’ ‘+char+’ ‘)) frm = frame(self, BOTTOM)
button(frm, LEFT, ‘eval’, lambda: self.eval(text)) button(frm, LEFT, ‘clear’, lambda: text.set(»))
def eval(self, text):
try:
text.set(str(eval(text.get(), self.names, self.names))) # был ‘x’ except SyntaxError:
try:
exec(text.get(), self.names, self.names) except:
text.set("ERROR") # не годится и как инструкция?
else:
text.set(») # действует, как инструкция
except:
text.set("ERROR") # другие ошибки вычисления выражения
if __name__ == ‘__main__’: CalcGui().mainloop()
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011