Дополнительное про графические интерфейсы
Содержание
Пример 1
В результате появится квадратное полотно со стороной в 200. Теперь что-нибудь в него посадим.
Пример 2
1 from Tkinter import Tk, Canvas
2 root = Tk()
3 canvas = Canvas(root, width=200, height=200)
4 canvas.pack()
5 canvas.create_line(0, 0, 100, 0, 200, 200, fill="red")#Создаем линию, составленную из двух отрезков, координаты концов которых указаны. Напоминаю, что точка (0, 0) находится в верхнем левом углу, а координатные оси направлены вправо и вниз.
6 root.mainloop()
Положим в центр векторного полотна растровую картинку.
Пример 3
1 from Tkinter import Tk, Canvas, PhotoImage
2 root = Tk()
3 canvas = Canvas(root, width=200, height=200)
4 canvas.pack()
5 image=PhotoImage(width=50, height=50)# Указываем размеры растровой картинки.
6 image.put("green", to=[15, 15, 15+10, 15+10])# положим в нашу растровую картинку новый прямоугольник размером 10 на 10. NB координаты отсчитываются относительно растровой картинки.
7 image.put("red", to=[10, 10])# положим в неё красную точку.
8 canvas.create_image(100, 100, image=image)# Указываем центр фигуры. Забавно, здесь image выступает и как параметр функции, и как переменная.
9 root.mainloop()
Чтобы создать круг, нужно задать canvas.create_oval(0, 50, 100, 150, fill="blue") - т.е. мы указываем вершины прямоугольника, в который вписан овал.
Пример 4
Теперь поднимемся на более высокий уровень мастерства - заставим программу реагировать на на движение мыши, нажатие кнопки пр.
1 from Tkinter import Tk, Canvas
2 def on_a(a):
3 print "Hello" #Ввели новую функцию.
4 root = Tk()
5 canvas = Canvas(root, width=200, height=200)
6 canvas.pack()
7 canvas.bind("a", on_a)# bind - связывание события с обработчиком этого события, т.е. когда мы нажимаем а, заданная в начале функция вызывается.
8 root.mainloop()
Полезные добавления к этому:
<1> первая кнопка мыши,
<4>, <5> - реакция на прокрутку,
<Motion>- мышка двигается,
<Shift-a>
<B1-a>
<B1-Motion>
- Координаты курсора:
ev (прописывается в скобочках, когда задаем функцию lalala(ev)),
ev.x,
ev.y