: “Создание GUI приложения на Python с использованием tkinter. Особенности виджета Button и кнопки tkinter”

Posted by


Создание 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.

0 0 votes
Article Rating

Leave a Reply

27 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@alexluthier786
17 days ago

Интересное видео, спасибо. Сечас как раз изучаю ткинтер. А вот как обстоит дело с обработкой некоторого достаточного массива кнопок? Экспериментировал с полем кнопок, создаваемых динамически через цикл. И это получается. А вот как узнать, какая кнопка в этом массиве, нажимается? Например, поле из 100 кнопок. Вручную писать функцию обработчик сто раз, это чересчур. Можно как-то иначе, обрабатывать нажатие, более автомаьичесаки?

@klaxwork1208
17 days ago

Вопрос: А тут нет каких-то обработчиков событий типа onClick, onButtonDown, onButtonUp, onMove, onMouseOver…?
Например, пока я веду курсор мыши над кнопкой – что-то происходит…
И если я хочу при изменении размера окна изменить размер картинки…
Что-то типа onResize…

@RewBoxNew
17 days ago

Признайтесь кто называл кнопку как битон

@floki_spb
17 days ago

ДЗ: фриз 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()

@legendary_user
17 days ago

при нажатии меняет фон в любой из возможных цветовых кодов

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()

@ВатквизДеСад
17 days ago

пропустили момент, когда у функции есть аргументы. спасибо за урок:)

@Лев-щ1в9ц
17 days ago

Есть несколько строк текста с разным размером шрифта. Возможно ли это всё запихнуть в некий контейнер и чтобы при нажатии на любую область этого контейнера выполнялось событие? Грубо говоря нужно запихнуть в кнопку несколько виджетов, чтобы это всё было одной кнопкой

@Arthur-xx2ek
17 days ago

Очень хороший урок!!

@anel9350
17 days ago

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()

@user-dd6ru4wu5r
17 days ago

Вариант выполненного ДЗ:

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()

@homyakadze7931
17 days ago

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()

@Владимир_Великий_Русь
17 days ago

опять же не показал размещение кнопки например по заданным координатам

@auromazdruslan6007
17 days ago

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

@abdulloakramov7941
17 days ago

👍👍

@locogooneGD
17 days ago

Ничего не работает, всё через пятую точку

@lumbagochapter9296
17 days ago

Спасибо вам большое!

@shedevr_football
17 days ago

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 Вот дз), сделал по-своему принципу😁

@pigarCR
17 days ago

win=tk.Tk()
win.geometry(f"400×500+10+20")
win.title("input")
win.mainloop()

@mrmsaid7617
17 days ago

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())

@hermano72-r2k
17 days ago

# 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()

27
0
Would love your thoughts, please comment.x
()
x