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