Cоздать окно:
from tkinter import * root = Tk() mainloop()
Cоздать холст для рисования:
from tkinter import * root = Tk() canv = Canvas(root) canv.pack() mainloop()
Создать кнопку и холст для рисования. Если поменять местами bt.pack() и canv.pack(), то кнопка будет под холстом.
from tkinter import * root = Tk() bt = Button(root,text = 'Hello!') canv = Canvas(root) bt.pack() canv.pack() mainloop()
Две кнопки друг под другом. Размер окна – минимально возможный.
from tkinter import * root = Tk() bt1 = Button(root,text = 'Hello 1') bt1.pack() bt2 = Button(root,text = 'Hello 2') bt2.pack() mainloop()
Создать окно определенного размера, две кнопки в первой строке
from tkinter import * root = Tk() root.geometry('600x480') fr = Frame(root) bt1 = Button(fr,text = 'Hello 1') bt2 = Button(fr,text = 'Hello 2') bt1.pack(side='left',padx=2) bt2.pack(side='left',padx=2) fr.pack(pady=5) mainloop()
Создать окно, две кнопки и холст для рисования
from tkinter import * root = Tk() fr = Frame(root) bt1 = Button(fr,text = 'Hello 1') bt2 = Button(fr,text = 'Hello 2') bt1.pack(side='left',padx=2) bt2.pack(side='left',padx=2) fr.pack(pady=5, fill = X) canv = Canvas(root,width=800,height=600) canv.pack() mainloop()
При размещении с помощью pack можно использовать различные параметры:
bt.pack(side = 'left')
– прижать к левой стороне
bt.pack(side = 'left', padx = 5)
– использовать отступ по горизонали (т.е. размещать не вполную к другим элементам этой строки)
bt.pack(side = 'left', pady = 5)
– использовать отступ по вертикали (т.е. размещать не вполную к другим строкам)
bt.pack(fill = X)
– игнорировать ширину виджета, растянуть так, чтобы занять все доступное пространство по ширине
expand=1 в сочетании с fill = BOTH заставит виджет занимать все доступное пространоство по ширине и высоте при изменении размеров окна
from tkinter import * root = Tk() fr = Frame(root) root.geometry('800x600') bt1 = Button(fr,text = 'Hello 1') bt2 = Button(fr,text = 'Hello 2') bt1.pack(side='left',padx=2) bt2.pack(side='left',padx=2) fr.pack(pady=5, fill = X) canv = Canvas(root, bg = 'white') canv.pack(fill=BOTH,expand=1) mainloop()
Button
– кнопка
Text
– многострочное текстовое поле для ввода
Entry
–однострочное текстовое поле для ввода
Label
– надпись
Canvas
– холст для рисования
Эти и другие виджеты прекрасно описаны на сайте: http://effbot.org/tkinterbook/tkinter-index.htm#class-reference
Реакция на события:
– при щелчке любой кнопкой мыши на bt вызывать функцию test
bt.bind('<Button>',test)
canv.bind('<Motion>',move)
– при перемещении мыши на canv вызывать функцию move
Получить данные о событии:
from tkinter import * from random import randrange as rnd root = Tk() fr = Frame(root) root.geometry('800x600') bt1 = Button(fr,text = 'Hello 1') bt2 = Button(fr,text = 'Hello 2') bt1.pack(side='left',padx=2) bt2.pack(side='left',padx=2) fr.pack(pady=5, fill = X) canv = Canvas(root, bg = 'white') canv.pack(fill=BOTH,expand=1) colors = ['orange','red','blue','yellow','green'] def click(event): global color color = colors[rnd(len(colors))] color = colors[rnd(len(colors))] def move(event): x = event.x y = event.y canv.create_oval(x-30,y-30,x+30,y+30,fill=color) canv.bind('<Motion>',move) canv.bind('<Button>',click) mainloop()