Библиотека tkinter используются для построения графических интерфейсов в языке программирования Python.В Python 3 эта библиотека записывается с маленькой буквы.Чтобы включить tkinter в программу необходимо использовать инструкцию import:
from tkinter import *
Tkinter по своей сути является событийно-ориентированной библиотекой.Приложения,построенные на базе tkinter, имеют главный цикл, в котором обрабатываются события.
Главный цикл имеет имя mainloop.Именно главный цикл - является ядром программы и позволяет в процессе выполнения реагировать на возникающие события,приходящие от пользователя.
Класс Tk - это базовый класс любого приложения,основанного на библиотеке tkinter.
Листинг №1
from tkinter import *
def button_clicked():
print ("Ты меня нажал!")
root=Tk()
button1 = Button(root, bg="red", text="Кликни меня!", command=button_clicked)
button1.place(x = 0, y = 0)
root.mainloop()
В листинге № 1 имеется кнопка,выводящая сообщение "Ты меня нажал!" в консоль.Графический элемент кнопка создаётся при помощи конструктора Button,в котором указываются именованные аргументы с значениями определёнными через знак равенства.В данном случае это bg,text,command.
Листинг №2
from tkinter import *
import time
def button_clicked():
button1.configure(text="Ты меня кликнул")
root=Tk()
button1 = Button(root)
button1.configure(text="Кликни меня", command=button_clicked)
button1.pack()
root.mainloop()
В листинге №2 с помощью метода configure изменяются параметры графического элемента во время работы программы.
Листинг №3
from tkinter import *
from tkinter import messagebox
def button_clicked():
messagebox.showinfo("Сообщение", button.cget("text"))
root=Tk()
button = Button(root,text ="кликни меня", command=button_clicked)
button.pack()
root.mainloop()
В листинге №3 используется метод cget,который читает определенное в параметре свойство графического элемента и возвращает его значение в выполняемую программы для дальнейшей обработки.
Листинг №4
from tkinter import *
def funcadd():
n3.delete(0, END)
value = int(n1.get()) + int(n2.get())
n3.insert(0, value)
def funcsub():
n3.delete(0, END)
value = int(n1.get()) - int(n2.get())
n3.insert(0, value)
root = Tk()
root.geometry("500x500")
n1 = Entry(width=50)
n2 = Entry(width=50)
n3 = Entry(width=50)
b1 = Button(text="Сложить",command =funcadd)
b2 = Button(text="Вычесть",command =funcsub)
n1.place(x = 0,y = 0)
n2.place(x = 0,y = 25)
n3.place(x = 0,y = 95)
b1.place(x = 0, y = 50)
b2.place(x = 75, y = 50)
root.mainloop()
Листинг №4 - есть реализация калькулятора на две операции:сложение и вычитание.Данная реализация не проверяет входные данные.Пользователь может легко ввести нечисловые данные и тогда Python будет негодовать - покажет ошибку.Как упражнение можно по аналогии добавить операции умножения и деления.
Листинг №5
from tkinter import *
def funcadd():
n3.delete(0, END)
if n1.get().isdigit() and n2.get().isdigit():
value = int(n1.get()) + int(n2.get())
n3.insert(0, value)
else:
n3.insert(0,"Нужно ввести два числа")
def funcsub():
n3.delete(0, END)
if n1.get().isdigit() and n2.get().isdigit():
value = int(n1.get()) - int(n2.get())
n3.insert(0, value)
else:
n3.insert(0,"Нужно ввести два числа")
root = Tk()
root.geometry("500x500")
n1 = Entry(width=50)
n2 = Entry(width=50)
n3 = Entry(width=50)
b1 = Button(text="Сложить",command =funcadd)
b2 = Button(text="Вычесть",command =funcsub)
n1.place(x = 0,y = 0)
n2.place(x = 0,y = 25)
n3.place(x = 0,y = 95)
b1.place(x = 0, y = 50)
b2.place(x = 75, y = 50)
root.mainloop()
Листинг №5 - это реализация калькулятора,проверяющего введенные значения.Если в первые два текстовых поля ввести нечисловые данные,то программа изменит содержимое третьего текстового поля на текст "Нужно ввести два числа".
Листинг №6
from tkinter import *
import time
def tick():
global counter
counter += 1
aftertick = label.after(1000, tick)
label['text'] = str (counter)
if counter == 10:
label.after_cancel(aftertick)
root=Tk()
label = Label(font='sans 20')
counter = 0
label.pack()
tick()
root.mainloop()
Листинг №6 представляет собой программу,выводящую количество секунд пришедших после запуска и останавливающаяся по истечении десяти секунд.
Метод after используется для выполнения указанной функции через указанное время.Метод after_cancel отменяет периодическое действие задания,определенного в методе after во втором аргументе.
Листинг №7
from tkinter import *
def setVar1():
global val_1,click
if (click == 0):
val_1 = n1.get()
print(val_1)
click = 1
n1.delete(0, END)
def funcadd():
global sign
sign = "+"
setVar1()
def funcsub():
global sign
sign = "-"
setVar1()
def funceq():
global click
result = 0
val_2 = 0
if (click == 1):
val_2 = n1.get()
n1.delete(0, END)
click = 0
if (sign == "+"):
result = int(val_1) + int(val_2)
if (sign == "-"):
result = int(val_1) - int(val_2)
n1.delete(0, END)
n1.insert(0,result)
root = Tk()
root.geometry("500x500")
n1 = Entry(width=50)
b1 = Button(text="Сложить",command =funcadd)
b2 = Button(text="Вычесть",command =funcsub)
b3 = Button(text="Равно",command =funceq)
n1.place(x = 0,y = 0)
b1.place(x = 0, y = 50)
b2.place(x = 75, y = 50)
b3.place(x = 150, y = 50)
click = 0
val_1 = 0
sign = "+"
root.mainloop()
Листинг №7 - представляет собой калькулятор,который использует не три текстовых поля,а одно.Конечно,это не идеальный калькулятор,то он полностью работоспособен.Как упражнение можно по аналогии добавить операции умножения и деления.
Листинг №8
from tkinter import *
def setVar1():
global val_1
val_1 = n1.get()
n1.delete(0, END)
def funcadd():
global sign
sign = "+"
setVar1()
def funcsub():
global sign
sign = "-"
setVar1()
def funceq():
result = 0
val_2 = n1.get()
n1.delete(0, END)
if (sign == "+"):
result = int(val_1) + int(val_2)
if (sign == "-"):
result = int(val_1) - int(val_2)
n1.delete(0, END)
n1.insert(0,result)
root = Tk()
root.geometry("500x500")
n1 = Entry(width=50)
b1 = Button(text="Сложить",command =funcadd)
b2 = Button(text="Вычесть",command =funcsub)
b3 = Button(text="Равно",command =funceq)
n1.place(x = 0,y = 0)
b1.place(x = 0, y = 50)
b2.place(x = 75, y = 50)
b3.place(x = 150, y = 50)
val_1 = 0
sign = "+"
root.mainloop()
Листинг №8 - это немного подчищенная реализация калькулятора:убрана глобальная переменная click,которая оказалась лишней.Это поправка делает данный код более красивым.
Листинг №9
from tkinter import *
from tkinter import filedialog
import sys
def cmopen():
file_path = filedialog.askopenfilename()
f=open(file_path, "r")
text.insert(0.0, f.read())
f.close()
def cmsave():
file = filedialog.asksaveasfile(defaultextension='.txt')
print(file.name)
lines=text.get(0.0, END)
print(lines)
f = open(file.name, 'w')
f.write(lines)
f.close
def cmexit():
sys.exit(0)
root = Tk()
root.geometry('500x500')
scrollbar = Scrollbar(root)
text = Text(root, yscrollcommand = scrollbar.set ,wrap=WORD,width=50)
text.place(x = 0 , y = 0)
mainmenu = Menu(root)
root.config(menu=mainmenu)
filemenu = Menu(mainmenu, tearoff=0)
filemenu.add_command(label="Открыть файл",command=cmopen)
filemenu.add_command(label="Сохранить",command=cmsave)
filemenu.add_command(label="Выход",command=cmexit)
mainmenu.add_cascade(label="Команды", menu=filemenu)
root.mainloop()
Листинг №9 - минималистический текстовый редактор,который умеет открыть и сохранять документы на жесткий диск.В нём показано,как создать меню,как открывать стандартные файловые диалоговые окна и производить их тривиальную обработку.
Программы,представленные выше, имеют ценность только для начинающих программировать на языке программирования Python.Библиотека tkinter на самом деле достаточна хороша и является стандартным кросс-платформенным средством создания графических приложений.
|