8. Рисуем на Tkinter вместо Черепашки

Пришла пора сменить графическую систему отображения. К Черепашке мы еще вернемся (с ее помощью удобно рисовать фракталы), а пока оставим ее и начнем рисовать в 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()
1. Создать кнопку и прижать ее к левой стороне окна
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()
4. Что означают 30,50,120,80? Как это понимать?
5. Нарисуйте квадрат примерно в центра окна, размером 100


Комментарии:

5 thoughts on “8. Рисуем на 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 не будет опубликован. Обязательные поля помечены *