Создание GUI (графического пользовательского интерфейса) приложения с помощью библиотеки tkinter в Python является простым и эффективным способом создания интерактивных приложений. В этом руководстве мы рассмотрим виджет Button (кнопка) tkinter и покажем, как создать кнопку, назначить ей функцию обработчик событий и настроить ее внешний вид.
Шаг 1: Установка tkinter
Первым шагом в создании GUI приложения с использованием tkinter является установка библиотеки. Обычно tkinter устанавливается по умолчанию вместе с установкой Python, поэтому дополнительной установки, как правило, не требуется. Однако, если у вас нет tkinter, вы можете установить его с помощью следующей команды:
pip install tk
Шаг 2: Создание основного окна
Для создания основного окна приложения в tkinter мы используем класс Tk(). Создайте новый файл Python и добавьте следующий код:
import tkinter as tk
root = tk.Tk()
root.title("Мое GUI приложение")
root.mainloop()
Этот код создаст новое окно с заголовком "Мое GUI приложение".
Шаг 3: Добавление кнопки
Теперь давайте добавим кнопку в наше приложение. Для этого используем класс Button(). Добавьте следующий код после создания основного окна:
button = tk.Button(root, text="Нажми меня")
button.pack()
Этот код создает новую кнопку с надписью "Нажми меня" и добавляет ее в основное окно с помощью метода pack().
Шаг 4: Назначение функции обработчика событий
Часто кнопки используются для вызова функций при ее нажатии. Для назначения функции обработчика событий используйте аргумент command. Добавьте следующий код для назначения функции обработчика событий на кнопку:
def on_button_click():
print("Кнопка нажата!")
button = tk.Button(root, text="Нажми меня", command=on_button_click)
button.pack()
Теперь при нажатии на кнопку будет вызываться функция on_button_click() и будет отображаться сообщение "Кнопка нажата!".
Шаг 5: Настройка внешнего вида кнопки
Вы можете настроить внешний вид кнопки, например, изменить цвет, размер и шрифт текста. Для этого используйте аргументы bg (цвет фона), fg (цвет текста), width (ширина кнопки) и font (шрифт текста). Пример:
button = tk.Button(root, text="Нажми меня", command=on_button_click, bg="blue", fg="white", width=10, font=("Arial", 12))
button.pack()
Этот код создает кнопку с синим фоном, белым текстом, шириной 10 символов и шрифтом Arial размером 12.
Это был краткий обзор создания GUI приложения с использованием tkinter и виджета Button. Надеюсь, это руководство было полезным и помогло вам создать свое собственное GUI приложение на Python.
Интересное видео, спасибо. Сечас как раз изучаю ткинтер. А вот как обстоит дело с обработкой некоторого достаточного массива кнопок? Экспериментировал с полем кнопок, создаваемых динамически через цикл. И это получается. А вот как узнать, какая кнопка в этом массиве, нажимается? Например, поле из 100 кнопок. Вручную писать функцию обработчик сто раз, это чересчур. Можно как-то иначе, обрабатывать нажатие, более автомаьичесаки?
Вопрос: А тут нет каких-то обработчиков событий типа onClick, onButtonDown, onButtonUp, onMove, onMouseOver…?
Например, пока я веду курсор мыши над кнопкой – что-то происходит…
И если я хочу при изменении размера окна изменить размер картинки…
Что-то типа onResize…
Признайтесь кто называл кнопку как битон
ДЗ: фриз 2 кнопки + смена фона при четном и нечетном count.
count = 0
import tkinter as tk
import random
def say_hello():
print("Hello")
def add_label():
label = tk.Label(win,text='new')
label.pack()
def coloring():
color=random.randint(1,900000)
win.config(bg=f'#{color}')
def counter():
global count
count+=1
if count % 2==0:
btn3['text'] = "Чётное"
btn2['state'] = tk.NORMAL
coloring()
else:
btn3['text'] = "Нечётное"
btn2['state'] = tk.DISABLED
coloring()
win = tk.Tk()
win.geometry("600×600+100+200")
win.title("Моё первое графическое приложение")
btn1 = tk.Button(win, text="Hello",
command=say_hello
)
btn2=tk.Button(win,text="Add new label",
command=coloring
)
btn3=tk.Button(win,text="Счетчик: {count}",
command=counter,
bg='red'
)
btn1.pack()
btn2.pack()
btn3.pack()
win.mainloop()
при нажатии меняет фон в любой из возможных цветовых кодов
import tkinter as tk
import random
win=tk.Tk()
win.title('Графическая оболочка')
win.geometry('640×480+50+50')
photo=tk.PhotoImage(file='qq.png')
win.iconphoto(False,photo)
win.config(bg='black')
def piska():
win.config(bg=f'#{random.randint(1,999999)}')
onebtn=tk.Button(win,text='нажми для piska',command=piska,bg='blue',fg='red',font=('Times New Roman',50,'bold'))
onebtn.pack()
win.mainloop()
пропустили момент, когда у функции есть аргументы. спасибо за урок:)
Есть несколько строк текста с разным размером шрифта. Возможно ли это всё запихнуть в некий контейнер и чтобы при нажатии на любую область этого контейнера выполнялось событие? Грубо говоря нужно запихнуть в кнопку несколько виджетов, чтобы это всё было одной кнопкой
Очень хороший урок!!
from random import*
root = Tk()
root.title("Test")
root.geometry("300×400+600+200")
root["bg"] = "#fff"
root.resizable(width=False, height=False)
photo = PhotoImage(file="icon.png")
root.iconphoto(False, photo)
def func():
s = "blue black white yellow green red brown aqua orange lime".split()
root["bg"] = choice(s)
btn1 = Button(text="Нажми", command=func)
btn1.pack()
root.mainloop()
Вариант выполненного ДЗ:
def say_hello():
print('hello')
def add_label():
label=tk.Label(win,text='new')
label.pack()
def counter():
global count
count+=1
btn4['text']=f'Счетчик:{count}'
def disabling():
global count
count+=1
if count%2==0:
btn1['state']='disabled'
else:
btn1['state']='normal'
def coloring():
color=random.randint(1,900000)
win.config(bg=f'#{color}')
count = 0
import tkinter as tk
import random
win = tk.Tk()
h = 500
w = 600
photo = tk.PhotoImage(file = 'fun.png')
win.iconphoto(False, photo)
win.config(bg='green')
win.title("First window")
win.geometry(f"{h}x{w}+100+200")
btn1 = tk.Button(win,text='Hello',
command=say_hello)
btn2 = tk.Button(win,text='Add new label',
command=add_label)
btn3 = tk.Button(win,text='Add new label lambda',
command=lambda: tk.Label(win,text='new lambda').pack())
btn4 = tk.Button(win,text=f'Счетчик:{count}',
command=counter,
bg='red',
activebackground='blue'
)
btn5 = tk.Button(win,text='Disabling',
command=disabling,
bg='yellow',
activebackground='brown'
)
btn6 = tk.Button(win,text='BG_Coloring',
command=coloring,
bg='brown',
)
btn1.pack()
btn2.pack()
btn3.pack()
btn4.pack()
btn5.pack()
btn6.pack()
win.mainloop()
import tkinter as tk,random as r
root = tk.Tk()
root.geometry('600×600+200+300')
def counter():
root.config(bg = r.choice(color) )
color = ['black','blue','red','purple']
count = 0
btn1 = tk.Button(root,text = f'счетчик говна {count}',command = counter,
bg = 'black')
btn1.pack()
опять же не показал размещение кнопки например по заданным координатам
def clik_buttom_2():
global win
R = (str(hex(random.randint(1, 254))))[slice(2, 5, 1)]
G = (str(hex(random.randint(1, 254))))[slice(2, 5, 1)]
B = (str(hex(random.randint(1, 254))))[slice(2, 5, 1)]
RGB = '#' + R + G + B
win['bg'] = RGB
👍👍
Ничего не работает, всё через пятую точку
Спасибо вам большое!
import tkinter as tk
import random as r
def do():
colors = ('yellow', 'blue', 'red', 'pink', 'brown', 'purple', 'orange')
rand = r.randint(0, 6)
win.config(bg=colors[rand])
win = tk.Tk()
photo = tk.PhotoImage(file='programm.png')
win.config(bg='yellow')
win.geometry('400×400+300+200')
win.iconphoto(False, photo)
button = tk.Button(win, text='Click it!',
command=do
)
button.pack()
win.mainloop()
P.s Вот дз), сделал по-своему принципу😁
win=tk.Tk()
win.geometry(f"400×500+10+20")
win.title("input")
win.mainloop()
import random as rn
def hex_code():
rn_hex_code = ""
char_list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F"]
for i in range(6):
rn_hex_code += rn.choice(char_list)
return rn_hex_code
print(hex_code())
# Introduction tkinter. Widjet Button
def change_color():
color = ''
for i in range(6):
color += r.choice(chars)
return '#' + color
def say_hello():
global count_hello
count_hello += 1
print("Hello")
btn4.config(state=tk.NORMAL if count_hello % 2 == 0 else tk.DISABLED)
win.config(bg=change_color())
def add_label():
lbl = tk.Label(win, text='New')
lbl.pack()
win.config(bg=change_color())
def counter():
global count
count += 1
btn4['text'] = f'Count: {count}'
win.config(bg=change_color())
import tkinter as tk
import random as r
chars = 'ABCDEF' + ''.join(str(i) for i in range(10))
w = 400
h = 500
count = 0
count_hello = 0
win = tk.Tk()
win.title("GUI Application – Widget Button")
win.geometry(f"{w}x{h}+200+50")
btn1 = tk.Button(win, text='Hello', command=say_hello)
btn2 = tk.Button(win, text='Add label', command=add_label)
btn3 = tk.Button(win, text='Add new label lambda',
command=lambda: tk.Label(win, text='New Label Lambda').pack())
btn4 = tk.Button(win, text=f'Count: {count}', command=counter,
bg='#ca0', activebackground='#dfe1fd',
state=tk.NORMAL)
btn1.pack()
btn2.pack()
btn3.pack()
btn4.pack()
# =================
tk.mainloop()