Воскресенье, 24.11.2024, 09:50 | Приветствую Вас Гость

...

Блог


21:14
Запись о tkinter

Библиотека 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 на самом деле достаточна хороша и является стандартным кросс-платформенным средством создания графических приложений.

Просмотров: 332 | Добавил: moskov | Рейтинг: 0.0/0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Меню сайта

Мини-чат

Статистика


Онлайн всего: 12
Гостей: 12
Пользователей: 0

Форма входа

Календарь

«  Май 2019  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Архив записей

Друзья сайта

  • ЗОВ КОСМОСА

  • Хулиган Вселенной

  • Тюремная поэзия

  • Религиозная поэзия

  • Сайт клана ЛеГиоН
  • Поиск