Графический интерфейс простого калькулятора Python

graficheskij interfejs prostogo kalkulyatora python Текст и язык

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

Рис. 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

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