Tkinter вместо Черепашки

Пришла пора сменить графическую систему отображения. Tkinter – это один из способов создать «окошки и кнопки» на Python. Кроме Tkinter существуют и другие, самые известные: Qt, wxForms. Tkinter удобен тем, что он входит в стандартную поставку Python, а значит доступен всегда (почти всегда).

Недостаток – маловато возможностей для построения сложных систем. Но нам это совсем не помешает.
Создадим простую программу:

from tkinter import *
root = Tk()
mainloop()

Первая строка подключает модуль tkinter. Вторая строка – создает окно (главное и единственное). Третья – запускает цикл обработки событий (см. справочник: зачем нужен главный событийный цикл).

Немного изменим программу. Прежде, чем ее запустить, подумайте, что должно измениться?

from tkinter import *
root = Tk()
root.geometry('800x600')
mainloop()

Следующее изменение таково, что сложно предугадать, на что оно повлияет, но запустив программу, вы увидите это …

from tkinter import *
root = Tk()
root.geometry('800x600+1+1')
mainloop()

Если не получилось понять, то измените программу так:

from tkinter import *
root = Tk()
root.geometry('800x600+1000+1')
mainloop()

Для рисования создадим Canvas (холст):

from tkinter import *
root = Tk()
root.geometry('800x600')
canv = Canvas(root,bg='white') # создать в окне root, фон - белый
canv.pack(fill=BOTH,expand=1) # размер - максимально возможный в обе стороны
mainloop()

Нарисуем что-нибудь:

from tkinter import *
root = Tk()
root.geometry('800x600')
canv = Canvas(root,bg='white')
canv.pack(fill=BOTH,expand=1)

canv.create_rectangle(30,50,120,80,fill='green')
mainloop()
1. Что означают 30,50,120,80? Как это понимать?
2. Нарисуйте квадрат примерно в центра окна, размером 100

В Tkinter нет Черепашки, которая движется и оставляет след. Рисовать можно линии, квадраты, овалы, текст, многоугольники.
В отличие от Черепашки координаты в Tkinter обычные «компьютерные» — точка (0,0) в левом верхнем углу, а Y увеличивается сверху вниз.

from tkinter import *
root = Tk()
root.geometry('800x600')
canv = Canvas(root,bg='white')
canv.pack(fill=BOTH,expand=1)
 
canv.create_rectangle(30,50,120,80,fill='green')
canv.create_line(10,100,150,10,fill='blue',width=5)
canv.create_rectangle(200,200,500,500)
canv.create_oval(200,200,500,500)
canv.create_text(350,350,text='Hello!')
 
mainloop()
1. Нарисовать окружность с центром в точке 300,200, и радиусом 50 (см. справочник Tkinter Canvas)
2. Нарисовать закрашенную окружность в точке 300,200, и радиусом 50
3. Нарисовать линию
4. Нарисовать красную линию
5. Нарисовать красную линию толщиной 3 из точки 10,300 в точку 300,300
6. В какую сторону «растет» координата Y? Почему?
7. Какие названия цветов можно использовать?
8. Можно ли задать произвольный цвет, не имеющий названия?
9. Какие фигуры еще можно рисовать?

Чтобы не было проблем и вопросов по тому, как работать с координатами, выполним еще несколько заданий.
Для этого скопируйте код, который представлен ниже (писать свою часть программы нужно будет между линиями:

from tkinter import *
from random import randrange as rnd

root = Tk()
root.geometry('600x600')

canv = Canvas(bg='white')
canv.pack(fill=BOTH,expand=1)

for x in range(40,600,20):
        canv.create_line(x,40,x,580,fill='lightgray')
        canv.create_text(x,20,text=x,font = 'Arial 8')
        
for y in range(40,600,20):
        canv.create_line(40,y,580,y,fill='lightgray')
        canv.create_text(20,y,text=y,font = 'Arial 8')
canv.create_line(40,40,580,40,width=2,arrow='last')
canv.create_line(40,40,40,580,width=2,arrow='last')
#=================================================

#=================================================
mainloop()

В процессе обучения нам придется рисовать довольно много окружностей.
В Tkinter окружность рисуется по двум точкам (так же, как в paint):
окружность по двум точкам

from tkinter import *
from random import randrange as rnd

root = Tk()
root.geometry('600x600')

canv = Canvas(bg='white')
canv.pack(fill=BOTH,expand=1)

for x in range(40,600,20):
        canv.create_line(x,40,x,580,fill='lightgray')
        canv.create_text(x,20,text=x,font = 'Arial 8')
        
for y in range(40,600,20):
        canv.create_line(40,y,580,y,fill='lightgray')
        canv.create_text(20,y,text=y,font = 'Arial 8')
canv.create_line(40,40,580,40,width=2,arrow='last')
canv.create_line(40,40,40,580,width=2,arrow='last')
#=================================================
x1 = 100
y1 = 100
x2 = 300
y2 = 300
canv.create_oval(x1,y1,x2,y2)

#=================================================
r = 3
canv.create_oval(x1-r,y1-r,x1+r,y1+r,fill='red')
canv.create_oval(x2-r,y2-r,x2+r,y2+r,fill='red')
mainloop()

Однако, так рисовать не слишком удобно, проще рисовать, задавая центр и радиус:

#=================================================
x = 200
y = 200
r = 100
w = 1
canv.create_oval(x-r,y-r,x+r,y+r,width=w)
#=================================================

Как вы можете видеть, окружность задана иначе, но расположена абсолютно так же, как в предыдущем варианте.

10. Нарисуйте окружность с радиусом 50 и центром в точке (60,60) двумя способами: через центр, радиус и через две точки.
11. Нарисуйте окружность по двум точкам: (10,20),(110,120) двумя способами.
12. Нарисуйте квадрат со стороной 20 и центром в точке (100,100).
13. Нарисуйте прицел (окружность с двумя линиями).
прицел1
14. Нарисуйте прицел.
прицел2
15. Нарисуйте прицел
прицел3

16. Нарисуйте квадрат 40х40 в центром в точке (100,100) с текстом внутри:
Квадрат и текст

17. Нарисуйте квадрат 40х40 с левым углом в точке (100,100) и текстом внутри (по центру).
18. Нарисуйте фигуру, соблюдая размеры и положение:
Снимок экрана от 2016-07-06 17:37:24

19. Нарисуйте фигуру, соблюдая размеры и положение:
Снимок экрана от 2016-07-06 17:41:16

20. Нарисуйте фигуру, соблюдая размеры и положение:
Снимок экрана от 2016-07-06 17:45:58

21. Нарисуйте фигуру, соблюдая размеры и положение:
Снимок экрана от 2016-07-06 17:50:47

5 thoughts on “Tkinter вместо Черепашки

  1. #Создать кнопку и прижать ее к левой стороне окна
    from tkinter import*
    root =Tk()
    root.geometry('500x500')
    
    but=Button(root,width=8,text='я кнопка')
    but.pack(side='left')
    
    mainloop()
    
  2.   
    #Создать две кнопки и прижать их к левой стороне окна
    from tkinter import*
    root =Tk()
    root.geometry('500x500')
     
    but=Button(root,width=8,text='я кнопка')
    but1=Button(root,width=8,text='я кнопка')
    but.pack(side='left')
    but1.pack(side='left')
     
    mainloop()

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

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