Pull to refresh

Tkinter: кратко для начинающих

Python - один из самых лёгких и популярных языков программирования. С помощью python решается достаточно много проблем - он сможет помочь в почти любой ситуации. Сегодня речь пойдёт о встроенной библиотеке tkinter. С помощью tkinter создаётся уникальный графический интерфейс для приложения на python.

В этой статье:

  1. Загрузка

  2. Синтаксис

  3. Компиляция

Tkinter вы можете скачать на официальном сайте или PyPi.

Загрузка

Для начала работы необходимо загрузить tkinter. Как я уже упоминал выше, он встроенный. Но встроен он начиная с версии Python3.

Загрузка для windows:

pip install tkinter

pip install --update tkinter

либо на всё том же PyPi выбираете tkinter для Windows, macOS или Linux.

Синтаксис

Теперь надо разобраться с синтаксисом tkinter. Сначала импортируем:

from tkinter import *

Теперь наша задача - сделать окно приложения. Для этого выберем название приложения (у меня это My App). Запишем

from tkinter import *
#исходный код

if __name__ == '__main__':
  #выполнение кода до загрузки
  root = Tk()
  root.title('My App') #заголовок
  root.mainloop() #отображение окна

пояснение

Сначала мы импортировали tkinter. После него идёт исходный код - виджеты, текст и тд. После if name == 'main' в отступах идёт код, который выполняется до загрузки, тоесть первее чем код в начале (не считая импорт). Сам код, который будет дальше, пишите до. .mainloop() отвечает за отображение окна - оно обязательно должно быть в конце кода. Если вы редактируете 2 окна, нужно ставить не в конец, а в начало кода второго окна (да я "очень хорошо" объясняю)

виджеты и текст

Теперь наша задача - ввести текст. Наше окно пока что пустое. Выглядит оно так:

P.S. картинка с интернета
P.S. картинка с интернета

Чтобы добавить и редактировать текст, нужно использовать виджет Label. Давайте попробуем записать

lbl1 = Label(root, text='Привет')
lbl1.grid(column=0, row=0)
Виджет Label
Виджет Label

Row отвечает за строку, а column за столбец. Правда, у некоторых могут возникнуть проблемы в том, что вторая строка сдвинута. Для этого изменим grid на place

lbl1.place(x=10,y=10)

Нужно всего лишь указать место по x и y. Для удобства можете задать отдельный класс для управления переменными

class wid_prm():
  #класс управления переменными
  x     = 10
  y1    = 10
  y2    = 30
  y3    = 50
  x_y_z = 410
  #...

lbl1 = Label(root, text='...')
lbl2 = Label(root, text='...')

#плейсы
lbl1.place(x=x,y=y1)
lbl2.place(x=x,y=y2)

Думаю, тут всё понятно. Местоположение по x нужно использовать одно, если вы хотите использовать один столбец. Думаю, не стоит тратить время, нужно автоматизировать управление переменными x, y

for auto_prm in range(5):
  y1 = 10
  y1 += 20
  y1 -= 10
  y1 -= 10
  if y1 == 30:
    #останавливаем процесс
    y1 = 30
  else:
    y2          = y1 + 20
    y3          = y1 + 40
    y4          = y1 + 60
    y5,y6,y7,y8 = y1 * 2 + (y1 * 4)
    y990 = 4
    if y990 > 1:
      x = 10
    else:
      x = 5

А для чего это? Это для того, чтобы задать переменные автоматически. Просто скопируйте и вставьте эту часть кода в свой код.

Давайте теперь сделаем шрифт жирным в Label

lbl1 = Label(root,text='...',font=("Times New Roman",21,"bold"))

Вы, наверное, уже поняли, что за шрифт отвечает функция font. "bold" можете убрать, если вы не хотите жирный шрифт текста. 21 - размер текста в пикселях/мм.

Теперь попробуем использовать виджет Button - добавим кнопку

btn1 = Button(root, text='Не нажимай', command=clicked)
btn1.place(x=x_x,y=y1_y)

def clicked():
  print('Я же сказал...')

При нажатии на кнопку будет писать определённый текст по команде clicked. Вы можете дать любое название и любое содержимое команды.

Получается, что полный код пока-что выглядит так:

from tkinter import * #импорт
#исходный код

class wid_prm():
  #класс управления переменными
  x     = 10
  y1    = 10
  y2    = 30
  y3    = 50
  x_y_z = 410
  for auto_prm in range(5):
    y1 = 10
    y1 += 20
    y1 -= 10
    y1 -= 10
    if y1 == 30:
      #останавливаем процесс
      y1 = 30
    else:
      y2          = y1 + 20
      y3          = y1 + 40
      y4          = y1 + 60
      y5,y6,y7,y8 = y1 * 2 + (y1 * 4)
      y990 = 4
      if y990 > 1:
        x = 10
      else:
        x = 5
class prm_x_y():
  x_x = 10
  y1_y = 50

lbl1 = Label(root, text='...')
btn1 = Label(root, text='Не нажимай', command=clicked)
def clicked():
  print('Я же сказал...')

#плейсы
lbl1.place(x=x,y=y1)
btn1.place(x=x_x,y=y1_y)

if __name__ == '__main__':
  root = Tk()
  root.title('My App')
  root.geometry('400x400')
  root.mainloop()

Отлично получилось.

Виджет messagebox

Виджет messagebox позволяет создать отдельное окно с информацией. Давайте попробуем

from tkinter import *
from tkinter import messagebox

messagebox.showinfo('Заголовок', 'текст')

Это довольно круто для дополнительных виджетов.

Я, наверное, с синтаксисом закончу.

Компиляция

Первым делом нужно установить приложение auto-py-to-exe. Вы его можете установить либо с того же PyPi, либо через командную строку:

pip install auto-py-to-exe

pip install --update auto-py-to-exe

Вы скачаете приложение auto-py-to-exe от python. Вот как оно выглядит:

auto-py-to-exe
auto-py-to-exe

В script location указываете путь к файлу. Вот небольшой пример:

>Path to file:
>\Users\username\Desktop\file.py

Дальше всё просто. Укажите One File, если не хотите, чтобы файлы приложения засоряли ваш пк. Если хотите скрыть консоль (и оставить только окно tkinter), выберите Window Based.

Загрузите иконку приложения в Icon. И наконец-то нажимаете CONVERT .PY TO .EXE. Думаю, с последующим вы сами справитесь - в консоль будет выводиться всякая всячина, и в итоге вы успешно сконвертируете приложение на tkinter.


В этом посте я рассказал базу синтаксиса tkinter. Да, виджетов в ткинтере в разы больше, я могу их подробно расписать в следующей статье если вы захотите.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.