Полезный материал:
- Руководство по 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)
Самая простая программа на 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("", 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()