В первой части мы узнали как создавать основное графическое окно, и размещать в нём кнопки и текстовые метки с помощью метода pack. Но как можно заметить этот способ ориентации в окне по сторонам света очень негибкий. И сегодня мы рассмотрим другой метод, лишённый этого недостатка.
Напишем такой код:
Здесь мы использовали метод place() Как он работает? Берутся координаты по осям x и y. Для понимания - икс это слева по оси координат, а игрек сверху. Таким образом мы можем расположить любые элементы в окне очень точно. Отступ измеряется в пикселях.
Также в коде у нас присутствует класс Text - многострочное текстовое поле. Оно также здесь имеет размеры и цвета. Как мы можем понять из названия в многострочном текстовом поле мы можем писать любой текст, а так же вставлять его туда из буфера обмена.
Значение WORD опции wrap позволяет переносить слова на новую строку целиком, а не по буквам. То есть если у вас какое-то слово в конце строки не помещается, то оно будет перемещено целиком на следующую строку.
Ну что же, прекрасно, мы уже умеем двумя способами позиционировать элементы. Но пока у нас кнопки не рабочие. Настало время их заставить что-нибудь делать.
Немного допишем наш код:
Тут я написал коротенькую записку, а нажатие на кнопку подписывает сообщение. Можно подписаться Совой, а можно Пухом.
Чтобы кнопки заставить работать, необходимо всего лишь дописать command=имя функции Таким образом нажатие на кнопку может выполнить всё что угодно - написать текст, сделать математические вычисления и т.д. Что она будет делать определяется в функции, которую вы для этого напишите.
В данном примере созданы 2 простейших функции, которые вставляют текст. Посмотрим на саму функцию
'\n\n' здесь двойной перенос строки, чтобы подпись не сливалась с текстом. Вся магия кроется в этой строке text.insert(END, puch)
К текстовому полю мы добавляем метод insert, который принимает 2 обязательных аргументы - место вставки и объект. Применяется для вставки любых переменных, строк и других объектов. Значение END соответствует позиции сразу после последнего символа.
Методы Text - get(), insert(), delete()
get() - возвращает
insert() - вставляет
delete() - удаляет
Кроме многострочного Text существует также и однострочное текстовое поле Entry Оно использует те же методы что и Text
Домашнее задание Сделать всё как на картинке. Кнопка Other должна брать значение из однострочного текстового поля и вставлять в главное окно. Таким образом вместо Совы или Пуха, мы можем подписаться кем угодно.
Напишем такой код:
Python:
from tkinter import *
root = Tk()
root.title("Метод place")
root.geometry("400x250")
root.resizable(width=False, height=False)
puch = Button(text="Puch", background="#483D8B", foreground="#fff", width=12).place(x=50, y=200)
sova = Button(text="Sova", background="#483D8B", foreground="#fff", width=12).place(x=250, y=200)
text = Text(width=47, height=10, bg="#F8F8FF", fg='black', wrap=WORD)
text.place(x=10, y=10)
root.mainloop()
Здесь мы использовали метод place() Как он работает? Берутся координаты по осям x и y. Для понимания - икс это слева по оси координат, а игрек сверху. Таким образом мы можем расположить любые элементы в окне очень точно. Отступ измеряется в пикселях.
Также в коде у нас присутствует класс Text - многострочное текстовое поле. Оно также здесь имеет размеры и цвета. Как мы можем понять из названия в многострочном текстовом поле мы можем писать любой текст, а так же вставлять его туда из буфера обмена.
Значение WORD опции wrap позволяет переносить слова на новую строку целиком, а не по буквам. То есть если у вас какое-то слово в конце строки не помещается, то оно будет перемещено целиком на следующую строку.
Ну что же, прекрасно, мы уже умеем двумя способами позиционировать элементы. Но пока у нас кнопки не рабочие. Настало время их заставить что-нибудь делать.
Немного допишем наш код:
Python:
from tkinter import *
root = Tk()
root.title("Метод place")
root.geometry("400x250")
root.resizable(width=False, height=False)
def medved():
puch = '\n\n' + 'Пух'
text.insert(END, puch)
def ptitsa():
sova = '\n\n' + 'Сова'
text.insert(END, sova)
puch = Button(text="Puch", background="#483D8B", foreground="#fff", width=12, command=medved).place(x=50, y=200)
sova = Button(text="Sova", background="#483D8B", foreground="#fff", width=12, command=ptitsa).place(x=250, y=200)
text = Text(width=47, height=10, bg="#F8F8FF", fg='black', wrap=WORD)
text.place(x=10, y=10)
root.mainloop()
Тут я написал коротенькую записку, а нажатие на кнопку подписывает сообщение. Можно подписаться Совой, а можно Пухом.
Чтобы кнопки заставить работать, необходимо всего лишь дописать command=имя функции Таким образом нажатие на кнопку может выполнить всё что угодно - написать текст, сделать математические вычисления и т.д. Что она будет делать определяется в функции, которую вы для этого напишите.
В данном примере созданы 2 простейших функции, которые вставляют текст. Посмотрим на саму функцию
Python:
def medved():
puch = '\n\n' + 'Пух'
text.insert(END, puch)
'\n\n' здесь двойной перенос строки, чтобы подпись не сливалась с текстом. Вся магия кроется в этой строке text.insert(END, puch)
К текстовому полю мы добавляем метод insert, который принимает 2 обязательных аргументы - место вставки и объект. Применяется для вставки любых переменных, строк и других объектов. Значение END соответствует позиции сразу после последнего символа.
Методы Text - get(), insert(), delete()
get() - возвращает
insert() - вставляет
delete() - удаляет
Кроме многострочного Text существует также и однострочное текстовое поле Entry Оно использует те же методы что и Text
Домашнее задание Сделать всё как на картинке. Кнопка Other должна брать значение из однострочного текстового поля и вставлять в главное окно. Таким образом вместо Совы или Пуха, мы можем подписаться кем угодно.