Пришла пора сменить графическую систему отображения. 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()
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()
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) #=================================================
Как вы можете видеть, окружность задана иначе, но расположена абсолютно так же, как в предыдущем варианте.
11. Нарисуйте окружность по двум точкам: (10,20),(110,120) двумя способами.
12. Нарисуйте квадрат со стороной 20 и центром в точке (100,100).
13. Нарисуйте прицел (окружность с двумя линиями).
14. Нарисуйте прицел.
15. Нарисуйте прицел
16. Нарисуйте квадрат 40х40 в центром в точке (100,100) с текстом внутри:
17. Нарисуйте квадрат 40х40 с левым углом в точке (100,100) и текстом внутри (по центру).
18. Нарисуйте фигуру, соблюдая размеры и положение:
19. Нарисуйте фигуру, соблюдая размеры и положение:
+
+