Пишем программу «Арифметический калькулятор» с графическим интерфейсом. Используем графическую библиотеку tkinter.
Сначала, в интерпретаторе командной строки Python shell выполните несколько Арифметический операций.
Скрин. 1.
Оказывается, Python, сам по себе, является хорошим и, в то же время, уникальным калькулятором.
Теперь, напишем программу «Калькулятор» с интерфейсом командной строки.
s = input()
print(s)
Лист. 1.
В программе листинг 1 функция input() приостанавливает работу программы в ожидании ввода строки с клавиатуры. Пользователь заканчиват ввод строки нажатием на клавишу «Enter» (Ввод). Функция input() возвращает, введённую пользователем строку в программу. В нашей программе, листинг 1, строка, введённая пользователем, сохраняется в переменной s. Точнее будет сказать, переменная s получает ссылку на эту строку.
В следующей строке программы, функция print() осуществляет ввод строки, введённой пользователем в командную строку Python
s = input("Введите математическое выражение: ")
print(s, ' = ', eval(s))
Лист. 2.
while(True):
s = input("Введите математическое выражение: ")
print(s, ' = ', eval(s))
Лист. 3.
from tkinter import *
tk = Tk()
lbl=Label()
lbl.pack()
s = '2**8'
lbl.config(text=s+' = '+str(eval(s)))
mainloop()
Лист. 4.
from tkinter import *
tk = Tk()
lbl=Label()
lbl.pack()
s = '2**8'
lbl.config(text=s+' = '+str(eval(s)))
btn=[]
frm=[Frame(), Frame(), Frame(), Frame()]
for i in frm:
i.pack(expand=YES, fill=BOTH)
btn += [Button(i), Button(i), Button(i), Button(i)]
for i in btn:
i.pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()
Лист. 5.
from tkinter import *
tk = Tk()
lbl=Label()
lbl.pack()
s = '2**8'
lbl.config(text=s+' = '+str(eval(s)))
btn=[]
frm=[Frame(), Frame(), Frame(), Frame()]
for i in frm:
i.pack(expand=YES, fill=BOTH)
btn += [Button(i), Button(i), Button(i), Button(i)]
for i in range(len(btn)):
btn[i].pack(expand=YES, fill=BOTH, side=LEFT)
btn[i].config(text='+', font=('mono', 30, 'bold'), width=3, height=2)
mainloop()
Лист. 6.
from tkinter import *
key = '+-/*123←456=7890'
tk = Tk()
lbl=Label()
lbl.pack()
s = '2**8'
lbl.config(text=s+' = '+str(eval(s)))
btn=[]
frm=[Frame(), Frame(), Frame(), Frame()]
for i in frm:
i.pack(expand=YES, fill=BOTH)
btn += [Button(i), Button(i), Button(i), Button(i)]
for i in range(len(btn)):
btn[i].pack(expand=YES, fill=BOTH, side=LEFT)
btn[i].config(text=key[i], font=('mono', 30, 'bold'), width=3, height=2)
mainloop()
Лист. 7.
from tkinter import *
key = '+-/*123←456=7890'
s = ''
def mathExpr(n):
global s
s += n
lbl.config(text=s)
tk = Tk()
lbl=Label()
lbl.pack()
btn=[]
frm=[Frame(), Frame(), Frame(), Frame()]
for i in frm:
i.pack(expand=YES, fill=BOTH)
btn += [Button(i), Button(i), Button(i), Button(i)]
for i in range(len(btn)):
btn[i].pack(expand=YES, fill=BOTH, side=LEFT)
btn[i].config(text=key[i], font=('mono', 30, 'bold'), width=3, height=2)
btn[i].config(command=lambda n=i : mathExpr(key[n]))
mainloop()
Лист. 8.
from tkinter import *
key = '+-/*123←456=7890'
s = ''
def mathExpr(n):
global s
if ord(n) == 61:
lbl.config(text=s+' = '+str(eval(s)))
s = ''
elif ord(n) == 8592:
s = s[0:-1]
lbl.config(text=s)
else:
s += n
lbl.config(text=s)
tk = Tk()
lbl=Label()
lbl.pack()
btn=[]
frm=[Frame(), Frame(), Frame(), Frame()]
for i in frm:
i.pack(expand=YES, fill=BOTH)
btn += [Button(i), Button(i), Button(i), Button(i)]
for i in range(len(btn)):
btn[i].pack(expand=YES, fill=BOTH, side=LEFT)
btn[i].config(text=key[i], font=('mono', 30, 'bold'), width=3, height=2)
btn[i].config(command=lambda n=i : mathExpr(key[n]))
mainloop()
Лист. 9.
from tkinter import * # графическая библиотека
from random import shuffle # перемешать список suffle(A)
column = 4 # столбцы
row = 4 # строки
btn = [] # список кнопок
key = '+-/*123←456=7890'
s = ''
def play(n): # функция обработчик нажатия на кнопку
global s
if n == 11:
s = str(eval(s))
elif n == 7:
s = s[0:-1]
else:
s += key[n]
msg.config(text=s)
msg = Message(width=500, font =("mono", 16, "bold"))
msg.pack(expand=YES, fill= BOTH)
for i in range(row):
f = Frame()
f.pack(expand=YES, fill=BOTH)
for j in range(column):
btn += [Button(f, font =("mono", 16, "bold"), width = 5, height=3)]
btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
btn[-1].config(text = key[i*column+j], command=lambda n=i*column+j:play(n))
mainloop()
Лист. 1.
Лист. 1.