Введение в Tkinter


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.bind('<Button>',test)
– при щелчке любой кнопкой мыши на bt вызывать функцию 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()

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *