Пришла пора сменить графическую систему отображения. К Черепашке мы еще вернемся (с ее помощью удобно рисовать фракталы), а пока оставим ее и начнем рисовать в 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')
bt1 = Button(root,width=8,text='Go!')
mainloop()
Ошибок нет, но нет и кнопки! Причина в том, что создать кнопку мало – надо ее размесить на форме. За это отвечает метод pack() (см. справочник – параметры pack)
from tkinter import *
root = Tk()
root.geometry('800x600')
bt1 = Button(root,width=8,text='Go!')
bt1.pack()
mainloop()
2. Создать две кнопки и прижать их к левой стороне окна
3. Создать две кнопки в верхней части окна. Кнопки расположить горизонтально (вторая справа от первой), в одной строке
На последней задаче остановимся подробнее: если просто написать
bt1.pack(side='left') bt2.pack(side='left')
То кнопки будут расположены горизонтально, но не в верхней части окна. Другой вариант:
bt1.pack(side='top') bt2.pack(side='top')
так же не дает нужного результата: кнопки в верхней части окна, но друг под другом.
Выход из этой ситуации есть и он заключается в использовании Frame. Мы создадим невидимый контейнер, в который поместим кнопки. Прижмем их к левому краю Frame, а сам контейнер – к верхней границе окна:
from tkinter import *
root = Tk()
root.geometry('800x600')
fr = Frame(root)
bt1 = Button(fr,width=8,text='1')
bt2 = Button(fr,width=8,text='2')
bt1.pack(side='left')
bt2.pack(side='left')
fr.pack()
mainloop()
Неплохо, но кнопки «слиплись». Это некрасиво. Исправим, использую padx и pady:
from tkinter import *
root = Tk()
root.geometry('800x600')
fr = Frame(root)
bt1 = Button(fr,width=8,text='1')
bt2 = Button(fr,width=8,text='2')
bt1.pack(side='left',padx=2)
bt2.pack(side='left',padx=2)
fr.pack(pady=5)
mainloop()
И снова будем рисовать. Для этого создадим Canvas
from tkinter import *
root = Tk()
root.geometry('800x600')
fr = Frame(root)
bt1 = Button(fr,width=8,text='1')
bt2 = Button(fr,width=8,text='2')
bt1.pack(side='left',padx=2)
bt2.pack(side='left',padx=2)
fr.pack(pady=5)
canv = Canvas(root,bg='white')
canv.pack(fill=BOTH,expand=1)
mainloop()
Проверим, можем ли мы рисовать?
from tkinter import *
root = Tk()
root.geometry('800x600')
fr = Frame(root)
bt1 = Button(fr,width=8,text='1')
bt2 = Button(fr,width=8,text='2')
bt1.pack(side='left',padx=2)
bt2.pack(side='left',padx=2)
fr.pack(pady=5)
canv = Canvas(root,bg='white')
canv.pack(fill=BOTH,expand=1)
canv.create_rectangle(30,50,120,80,fill='green')
mainloop()
5. Нарисуйте квадрат примерно в центра окна, размером 100
#Создать кнопку и прижать ее к левой стороне окна from tkinter import* root =Tk() root.geometry('500x500') but=Button(root,width=8,text='я кнопка') but.pack(side='left') mainloop()+
#Создать две кнопки и прижать их к левой стороне окна 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()+