Полезный материал:
- Руководство по Tkinter.
- Python --- (11) Компонент окна Tkinter: Canvas. (подробно)
- Tkinter. Программирование GUI на Python. Курс.
- Tkinter - создание графического интерфейса в Python.
- Tkinter. Рисуем линии, прямоугольники, круг и текст в Tkinter [Урок №6].
- Tkinter. Пишем игру змейка на Tkinter [Урок №7].
- Tkinter. Обучение Python GUI (уроки по Tkinter).
- TKinter - GUI приложение на Python (+игра "Сапёр") [egoroff_channel] (28 видео, YouTube)
- Игра "Сапер" на Python:TKinter [egoroff_channel] (16 видео, YouTube)
- PDF: Python для детей. Самоучитель по программированию (Бриггс Джейсон)
- PDF: Учим Python делая крутые игры (Свейгарт Эл)
Самая простая программа на TKinter, которая запускает окно:
import tkinter master = tkinter.Tk() master.mainloop()
Зададим размеры и положение окну TKinter:
from tkinter import *
master = Tk()
master.title('Окно')
master.geometry('800x600+200+50')
master.geometry('-0-0')
master.resizable(height=False, width=False)
master.mainloop()
Зададим размеры и расположим окно TKinter по центру экрана:
from tkinter import *
master = Tk()
scr_w = master.winfo_screenwidth()
scr_h = master.winfo_screenheight()
width, height = 800, 600
x = scr_w // 2 - width // 2
y = scr_h // 2 - height // 2
master.title('Окно')
master.geometry(f'{width}x{height}')
master.geometry(f'-{x}-{y}')
master.resizable(height=False, width=False)
master.mainloop()
Распахнуть окно TKinter на весь экран:
master.attributes('-fullscreen', True)
Шаблон окна TKinter с холстом внутри окна:
from tkinter import *
master = Tk()
master.title('Окно')
canvas = Canvas(master, width=800, height=600, background='WHITE')
canvas.pack(expand=True, fill=BOTH)
master.mainloop()
Названия цветов:
azure, blue, coral, cyan, gold, gray, green, lavender, light gray, magenta, navy, orange, pink, purple, red, sky blue, snow, tomato, white, yellow, alice blue, dark orange, lemon chiffon, mint cream, misty rose
Названия цветов в цветовой таблице.
Шаблон окна TKinter с холстом внутри окна:
from tkinter import *
master = Tk()
master.title('Окно')
canvas = Canvas(master, width=800, height=600, background='WHITE')
canvas.pack(expand=True, fill=BOTH)
master.mainloop()
Простая программа на TKinter с определёнными размерами окна:
import tkinter master = tkinter.Tk() canvas = tkinter.Canvas(master, height=800, width=600) canvas.pack() master.mainloop()
В окне TKinter подкрасим фон:
import tkinter master = tkinter.Tk() canvas = tkinter.Canvas(master, bg='blue', height=600, width=600) canvas.pack() master.mainloop()
Синяя пунктирная (dash) линия:
canvas.create_line(200, 50, 500, 50, dash=(10, 6), fill='blue')
В окне TKinter нарисуем зелёный круг:
import tkinter master = tkinter.Tk() canvas = tkinter.Canvas(master, bg='blue', height=600, width=600) oval = canvas.create_oval((100, 100), (210, 210), fill='green') canvas.pack() master.mainloop()
В окне TKinter нарисуем белую линию (границу):
import tkinter master = tkinter.Tk() canvas = tkinter.Canvas(master, bg='blue', height=600, width=600) oval = canvas.create_oval((100, 100), (210, 210), fill='green', outline='white') fringe = canvas.create_line((50, 20), (50, 580), fill='white', width=3) canvas.pack() master.mainloop()
В окне TKinter двигаем овал:
import tkinter
def key_pressed(event):
if event.keysym == 'Up':
canvas.move(oval, 0, -10)
elif event.keysym == 'Left':
canvas.move(oval, -10, 0)
master = tkinter.Tk()
canvas = tkinter.Canvas(master, bg='blue', height=600, width=600)
oval = canvas.create_oval((100, 100), (210, 210), fill='green', outline='white')
fringe = canvas.create_line((50, 20), (50, 580), fill='white', width=3)
canvas.pack()
master.bind("<KeyPress>", key_pressed)
master.mainloop()
Команда рисования квадрата:
kvadr = canvas.create_rectangle((400, 200), (300, 300), fill='lightblue')
Команда вывода текста на канве:
lab = canvas.create_text(100, 80,
fill="white", font="Times 20 italic bold",
text="Hello World!")
Label - команда вывода надписи - метки (смотреть вверху окна):
label = tkinter.Label(master, text="Hello world!", font=('', 30))
label.config(text='Меняю текст и фон', background="lightgrey")
label.pack()
Управляем окружностью с клавиатуры:
import tkinter
def key_pressed(event):
if event.keysym == 'space':
canvas.coords(oval, (300, 300, 310, 310))
if event.keysym == 'Up':
canvas.move(oval, 0, -10)
elif event.keysym == 'Down':
canvas.move(oval, 0, 10)
elif event.keysym == 'Left':
canvas.move(oval, -10, 0)
elif event.keysym == 'Right':
canvas.move(oval, 10, 0)
if canvas.coords(oval)[1] < 50: # координата y1
canvas.itemconfig(oval, fill='red')
if canvas.coords(oval)[0] < 50: # координата x1
canvas.move(oval, 400, 0)
master = tkinter.Tk()
canvas = tkinter.Canvas(master, bg='blue', height=600, width=600)
oval = canvas.create_oval((100, 100), (210, 210), fill='green')
fringe = canvas.create_line((50, 0), (50, 600), fill='white', width=3)
canvas.pack()
master.bind("<KeyPress>", key_pressed)
master.mainloop()
Рисуем окружности и управляем одной из них (анализируем столкновение):
import tkinter
def show_key(event):
label.config(text=event.keysym)
if event.keysym == 'Up':
label.config(fg="red")
canvas.move(oval1, 0, -10)
elif event.keysym == 'Down':
label.config(fg="green")
canvas.move(oval1, 0, 10)
elif event.keysym == 'Left':
canvas.move(oval1, -10, 0)
elif event.keysym == 'Right':
canvas.move(oval1, 10, 0)
else:
label.config(fg="blue")
pos = canvas.coords(oval1)
ox1, oy1, ox2, oy2 = pos
sx1, sy1, sx2, sy2 = canvas.coords(oval2)
if (ox2 >= sx1) and (ox1 <= sx2) and \
(oy2 >= sy1) and (oy1 <= sy2):
label_ava.config(text='АВАРИЯ')
else:
label_ava.config(text='Хорошо!')
# (x2 > 200) # 200, 200 | 500, 500
label_oval.config(text=str(pos))
master = tkinter.Tk()
label = tkinter.Label(master, text="Hello world!")
label.pack()
label_oval = tkinter.Label(master, text="Coordinates will be here!")
label_oval.pack()
label_ava = tkinter.Label(master, text="Good!")
label_ava.pack()
canvas = tkinter.Canvas(master, bg='white', height=600, width=600)
oval1 = canvas.create_oval((0, 0), (100, 100), fill='red')
oval2 = canvas.create_oval((200, 200), (300, 300), fill='green')
canvas.pack()
master.bind("", show_key)
master.mainloop()
Рисуем квадраты и двигаем их (управляемый квадрат двигает другие квадраты):
import tkinter
def show_key(event):
label.config(text=event.keysym)
lg1, vg1, ng1, pg1 = canvas.coords(oval1)
lg2, vg2, ng2, pg2 = canvas.coords(oval2)
lg3, vg3, ng3, pg3 = canvas.coords(oval3)
if lg1 < 0 or lg2 < 0 or lg3 < 0:
return
if event.keysym == 'Up':
label.config(fg="red")
canvas.move(oval1, 0, -10)
elif event.keysym == 'Down':
label.config(fg="green")
canvas.move(oval1, 0, 10)
elif event.keysym == 'Left':
canvas.move(oval1, -10, 0)
elif event.keysym == 'Right':
canvas.move(oval1, 10, 0)
else:
label.config(fg="blue")
pos = canvas.coords(oval1)
ox1, oy1, ox2, oy2 = pos
sx1, sy1, sx2, sy2 = canvas.coords(oval2)
if (ox2 >= sx1) and (ox1 <= sx2) and \
(oy2 >= sy1) and (oy1 <= sy2):
if event.keysym == 'Up':
canvas.move(oval2, 0, -abs(oy1 - sy2))
elif event.keysym == 'Down':
canvas.move(oval2, 0, 10)
elif event.keysym == 'Left':
canvas.move(oval2, -10, 0)
elif event.keysym == 'Right':
canvas.move(oval2, 10, 0)
label_ava.config(text='АВАРИЯ')
else:
label_ava.config(text='Хорошо!')
sx1, sy1, sx2, sy2 = canvas.coords(oval3)
if (ox2 >= sx1) and (ox1 <= sx2) and \
(oy2 >= sy1) and (oy1 <= sy2):
if event.keysym == 'Up':
canvas.move(oval3, 0, -abs(oy1 - sy2))
elif event.keysym == 'Down':
canvas.move(oval3, 0, 10)
elif event.keysym == 'Left':
canvas.move(oval3, -10, 0)
elif event.keysym == 'Right':
canvas.move(oval3, 10, 0)
label_ava.config(text='АВАРИЯ')
else:
label_ava.config(text='Хорошо!')
# (x2 > 200) # 200, 200 | 500, 500
label_oval.config(text=str(pos))
master = tkinter.Tk()
label = tkinter.Label(master, text="Hello world!")
label.pack()
label_oval = tkinter.Label(master, text="Coordinates will be here!")
label_oval.pack()
label_ava = tkinter.Label(master, text="Good!")
label_ava.pack()
canvas = tkinter.Canvas(master, bg='white', height=600, width=600)
oval1 = canvas.create_rectangle((0, 0), (100, 100), fill='red')
oval2 = canvas.create_rectangle((100, 200), (200, 300), fill='green')
oval3 = canvas.create_rectangle((400, 200), (300, 300), fill='lightblue')
canvas.pack()
master.bind("", show_key)
master.mainloop()