Python tkinter что такое root

Python tkinter что такое root Техника

Tkinter — библиотека для создания GUI-приложений на Python.

Общий шаблон программ

Все программы, написанные на Tkinter, должны иметь подобный шаблону вид:

   
 # создал главное окно (всегда называйте его root)

 # теперь окно будет отображено при запуске

Модуль tkinter включает следующие классы:

Ниже приведена схема, иллюстрирующая в какой части виджета работают какие свойства.

PhotoImage — класс цветной картинки. Синтаксис создания изображения:

  

name — имя картинки (не имя файла загружаемого изображения), p — полный путь к изображению.

Button — класс обычной кнопки. Общий синтаксис создания кнопки:

name — имя кнопки, window — имя окна, на котором она располагается.

Изменить свойство у кнопки или любого другого виджета можно так:


Обратите внимание, что везде все цвета пишутся в кавычках.

Radiobutton — класс радио — кнопки. Общий синтаксис создания кнопки:

  

name — имя радио-кнопки, window — имя окна, на котором она располагается.

Выбрать одну радио-кнопку можно только среди группы (радио-кнопок у которых значение параметра variable равны).

Checkbutton — класс кнопки-флажка (флажка). Общий синтаксис создания кнопки:

  

name — имя кнопки-флажка, window — имя окна, на котором он располагается.

Entry — класс однострочного текстового поля. Общий синтаксис создания однострочного текстового поля:

name — имя однострочного текстового поля, window — имя окна, на котором оно располагается.

Ниже a — имя текстового поля.

Text — класс многострочного текстогого поля. Общий синтаксис создания многострочного текстового поля:

name — имя многострочного текстового поля, window — имя окна, на котором оно располагается.

Ниже a — имя текстового поля.

Label — класс метки. Общий синтаксис создания метки:

name — имя метки, window — имя окна, на котором она располагается.

Scale — класс ползунка. Общий синтаксис создания ползунка:

name — имя ползунка, window — имя окна, на котором он располагается.

Scrollbar — класс полосы прокрутки. Общий синтаксис создания полосы прокрутки:

name — имя полосы прокрутки, window — имя окна, на котором она располагается.

Frame — класс фрейма. Общий синтаксис его создания:

name — имя фрейма, window — имя окна, на котором он располагается.

LabelFrame — класс фрейма с заголовком. Общий синтаксис его создания:

  

name — имя фрейма, window — имя окна, на котором он располагается.

Listbox — класс списка. Общий синтаксис его создания:

name — имя списка, window — имя окна, на котором он располагается.

Ниже a — имя списка.

Canvas — класс полотна для рисования. Общий синтаксис создания полотна:

name — имя полотна для рисования, window — имя окна, на котором оно располагается.

Ниже a — окно полотно для рисования.

Item — элемент (фигура), нарисованная на полотне Canvas. Синтаксис создания ссылки на item:

name — имя ссылки на item, canvas_ — имя Canvas, на котором рисуется фигура, method — одно из: create_line, create_rectangle, create_oval, create_polygon, create_text с соответственными методу параметрами.

PanedWindow — класс разделителя окна. Общий синтаксис его создания:

  

name — имя разделителя окна; window — имя окна, на котором он располагается; k — его ориентация (VERTICAL — вертикальна, HORIZONTAL — горизонтальна).

Ниже a — элемент класса PanedWindow.

Menu — класс главного меню. Общий синтаксис создания экземпляра меню:

  

name_main — имя экземпляра меню, window — имя окна, на котором оно располагается.

Для заполнения меню, используйте:


name_main — имя кнопки меню, M — имя экземпляра меню, t — текст, являющийся отображаемым названием подменю.

Заполнять командами подменю можно так:


name_undermenu — имя подменю, в которое добавиться команда; f — имя функции, которая выполнится при выбора данной команды.

Ниже a — подменю.

Виджеты в подменю

Все виджеты подменю обладают основными свойствами виджетов вне меню.

Также у виджетов подменю присутствуют специфические для каждого класса виджетов свойства.

Tk — класс главной формы. Общий синтаксис создания окна:

name — имя окна потомка.

Ниже a — окно главное окно.

Toplevel — класс окна верхнего уровня. Общий синтаксис создания окна:

name — имя окна потомка, window — имя окна, потомком которого оно является.

Ниже a — окно верхнего уровня.

Для обработки событий пишите:

a — имя виджета, у которого настраивается реакция на событие e. При наступлении события будет выполниться функция f).

  • Функция должна описываться следующим образом, если она «привязывается» к некоторому виджету методом bind:
 
    
  • В случае, когда для этого используется метод command (функция будет срабатывать только про событии «<Button-1>»), пишется без event:

Упаковщик геометрии — функция, используемая 1 раз для того, чтобы виджет отобразился в нужном месте с настроенными параметрами на экране.

Ниже a — некоторый виджет.

С помощью tkinter.messagebox можно создавать диалоговые окна. Для этого нужно отдельно его импортировать:

 
"Создаёт окно по типу да-нет"

askopenfilename — класс окна открытия файла. Общий синтаксис создания окна:

name — имя окна.

После выборе файла name будет хранить путь к этому файлу, что позволит считать его содержимое.

asksavefilename — класс окна сохранения файла. Общий синтаксис создания окна:

name — имя окна.

После выборе файла name будет хранить путь к этому файлу, что позволит сохранить в него содержимое.

Работа с командной строкой

Производится через модуль os:

  • Создание пустого окна с заголовком «Hello» и зелёным фоном:
   
  

  



Время на прочтение

image

Всем доброго времени суток!

Tkinter – это кроссплатформенная библиотека для разработки графического интерфейса на языке Python (начиная с Python 3.0 переименована в tkinter). Tkinter расшифровывается как Tk interface, и является интерфейсом к Tcl/Tk.
Tkinter входит в стандартный дистрибутив Python.

Весь код в этой статье написан для Python 2.x.
Чтобы убедиться, что Tkinter установлен и работает, воспользуемся стандартной функцией Tkinter _test():

import Tkinter
Tkinter._test()

После выполнения данного кода должно появиться следующее окно:

Python tkinter что такое root

Отлично, теперь можно приступать к написанию нескольких простых программ для демонстрации основных принципов Tkinter.

Hello world

Конечно, куда же без него. Первым делом нам нужно создать главное окно, написав

from Tkinter import *
root = Tk()

Да-да, всего одна строка, это вам не WinAPI (=. Теперь создадим кнопку, при нажатии на которую будет выводиться текст в консоль:

def Hello(event):
    print "Yet another hello world"

btn = Button(root,                  #родительское окно
             text="Click me",       #надпись на кнопке
             width=30,height=5,     #ширина и высота
             bg="white",fg="black") #цвет фона и надписи
btn.bind("<Button-1>", Hello)       #при нажатии ЛКМ на кнопку вызывается функция Hello
btn.pack()                          #расположить кнопку на главном окне
root.mainloop()

Всё просто, не так ли? Создаём экземпляр класса Button, указываем родителя и при желании список параметров. Есть еще немало параметров, таких как шрифт, толщина рамки и т.д.
Затем привязываем к нажатию на кнопку событие (можно привязать несколько разных событий в зависимости, например, от того, какой кнопкой мыши был нажат наш btn.
mainloop() запускает цикл обработки событий; пока мы не вызовем эту функцию, наше окно не будет реагировать на внешние раздражители.

Упаковщики

Функция pack() — это так называемый упаковщик, или менеджер расположения. Он отвечает за то, как виджеты будут располагаться на главном окне. Для каждого виджета нужно вызвать метод упаковщика, иначе он не будет отображён. Всего упаковщиков три:

pack(). Автоматически размещает виджеты в родительском окне. Имеет параметры side, fill, expand. Пример:

from Tkinter import *
root = Tk()
Button(root, text = '1').pack(side = 'left')
Button(root, text = '2').pack(side = 'top')
Button(root, text = '3').pack(side = 'right')
Button(root, text = '4').pack(side = 'bottom')
Button(root, text = '5').pack(fill = 'both')
root.mainloop()

Python tkinter что такое root

grid(). Размещает виджеты на сетке. Основные параметры: row/column – строка/столбец в сетке, rowspan/columnspan – сколько строк/столбцов занимает виджет. Пример:

from Tkinter import *
root = Tk()
Button(root, text = '1').grid(row = 1, column = 1)
Button(root, text = '2').grid(row = 1, column = 2)
Button(root, text = '__3__').grid(row = 2, column = 1, columnspan = 2)
root.mainloop()

Python tkinter что такое root

place(). Позволяет размещать виджеты в указанных координатах с указанными размерами.
Основные параметры: x, y, width, height. Пример:

from Tkinter import *
root = Tk()
Button(root, text = '1').place(x = 10, y = 10, width = 30)
Button(root, text = '2').place(x = 45, y = 20, height = 15)
Button(root, text = '__3__').place(x = 20, y = 40)
root.mainloop()

Python tkinter что такое root

Теперь для демонстрации других возможностей Tkinter, напишем простейший

Текстовый редактор

Без лишних слов приведу код:

from Tkinter import *
import tkFileDialog

def Quit(ev):
    global root
    root.destroy()
    
def LoadFile(ev): 
    fn = tkFileDialog.Open(root, filetypes = [('*.txt files', '.txt')]).show()
    if fn == '':
        return
    textbox.delete('1.0', 'end') 
    textbox.insert('1.0', open(fn, 'rt').read())
    
def SaveFile(ev):
    fn = tkFileDialog.SaveAs(root, filetypes = [('*.txt files', '.txt')]).show()
    if fn == '':
        return
    if not fn.endswith(".txt"):
        fn+=".txt"
    open(fn, 'wt').write(textbox.get('1.0', 'end'))

root = Tk()

panelFrame = Frame(root, height = 60, bg = 'gray')
textFrame = Frame(root, height = 340, width = 600)

panelFrame.pack(side = 'top', fill = 'x')
textFrame.pack(side = 'bottom', fill = 'both', expand = 1)

textbox = Text(textFrame, font='Arial 14', wrap='word')
scrollbar = Scrollbar(textFrame)

scrollbar['command'] = textbox.yview
textbox['yscrollcommand'] = scrollbar.set

textbox.pack(side = 'left', fill = 'both', expand = 1)
scrollbar.pack(side = 'right', fill = 'y')

loadBtn = Button(panelFrame, text = 'Load')
saveBtn = Button(panelFrame, text = 'Save')
quitBtn = Button(panelFrame, text = 'Quit')

loadBtn.bind("<Button-1>", LoadFile)
saveBtn.bind("<Button-1>", SaveFile)
quitBtn.bind("<Button-1>", Quit)

loadBtn.place(x = 10, y = 10, width = 40, height = 40)
saveBtn.place(x = 60, y = 10, width = 40, height = 40)
quitBtn.place(x = 110, y = 10, width = 40, height = 40)

root.mainloop()

Здесь есть несколько новых моментов.

Во-первых, мы подключили модуль tkFileDialog для диалогов открытия/закрытия файла. Использовать их просто: нужно создать объект типа Open или SaveAs, при желании задав параметр filetypes, и вызвать его метод show(). Метод вернёт строку с именем файла или пустую строку, если пользователь просто закрыл диалог.

Во-вторых, мы создали два фрейма. Фрейм предназначен для группировки других виджетов. Один содержит управляющие кнопки, а другой — поле для ввода текста и полосу прокрутки.
Это сделано, чтобы textbox не налезал на кнопки и всегда был максимального размера.

В-третьих, появился виджет Text. Мы его создали с параметром wrap=’word’, чтобы текст переносился по словам. Основные методы Text: get, insert, delete. Get и delete принимают начальный и конечный индексы. Индекс — это строка вида ‘x.y’, где x — номер символа в строке, а y — номер строки, причём символы нумеруются с 1, а строки — с 0. То есть на самое начала текста указывает индекс ‘1.0’. Для обозначения конца текста есть индекс ‘end’. Также допустимы конструкции вида ‘1.end’.

B в-четвёртых, мы создали полосу прокрутки (Scrollbar). После создания её нужно связать с нужным виджетом, в данном случае, с textbox. Связывание двустороннее:

scrollbar['command'] = textbox.yview
textbox['yscrollcommand'] = scrollbar.set

Вот и всё. Tkinter – это, безусловно, мощная и удобная библиотека. Мы осветили не все её возможности, остальные — тема дальнейших статей.

Полезные ссылки:
http://ru.wikiversity.org
http://www.pythonware.com/

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

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

Python tkinter что такое root

Загрузка

Для начала работы необходимо загрузить 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 окна, нужно ставить не в конец, а в начало кода второго окна (да я «очень хорошо» объясняю)

Дополнительно:  Root права на андроид super one

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

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

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 позволяет создать отдельное окно с информацией. Давайте попробуем

from tkinter import *
from tkinter import messagebox

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

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

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

Компиляция

Первым делом нужно установить приложение 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. Да, виджетов в ткинтере в разы больше, я могу их подробно расписать в следующей статье если вы захотите.

from tkinter import *


self.root = Tk()
self.root.configure(bg="red", padx=10, pady=10)
self.root.title("WELCOME- PLEASE LOGIN)")

name = Label(self.root, text="Name:", bg="magenta")
password = Label(self.root, text="Password", bg="magenta")
nameentry = Entry(self.root)
passwordentry = Entry(self.root)

name.grid(row=0, sticky=E)
password.grid(row=1, sticky=E)
nameentry.grid(row=0, column=1)
passwordentry.grid(row=1, column=1)

mainloop()

A window opens but is blank.

from tkinter import *


root = Tk()
root.configure(bg="red", padx=10, pady=10)
root.title("WELCOME- PLEASE LOGIN)")

name = Label(root, text="Name:", bg="magenta")
password = Label(root, text="Password", bg="magenta")
nameentry = Entry(root)
passwordentry = Entry(root)

name.grid(row=0, sticky=E)
password.grid(row=1, sticky=E)
nameentry.grid(row=0, column=1)
passwordentry.grid(row=1, column=1)

mainloop()

This works fine.

Why is using self.root causing an error vs just root?

from tkinter import *


def __init__(self, Event= None):

    root = Tk()
    root.configure(bg="red", padx=10, pady=10)
    root.title("WELCOME- PLEASE LOGIN)")

    name = Label(root, text="Name:", bg="magenta")
    password = Label(root, text="Password", bg="magenta")
    nameentry = Entry(root)
    passwordentry = Entry(root)

    name.grid(row=0, sticky=E)
    password.grid(row=1, sticky=E)
    nameentry.grid(row=0, column=1)
    passwordentry.grid(row=1, column=1)

mainloop()

Causes this error using init:
AttributeError: ‘NoneType’ object has no attribute ‘tk’
Using self.root in place of root causes the same error. Removing event= None also causes this error.

Basically, I am confused on self.root vs root, definitions and their errors, and classes.

I’m not sure if you’ll find this answer satisfying, but you call root.mainloop() because root is the object that has the mainloop method. In the code you’ve given, App has no mainloop function.

In simpler terms, this is just how tkinter works — you always end your script by calling the mainloop method of the root window. When that method returns, your program will exit.

import Tkinter as tk
root = tk.Tk()
<your widgets go here>
root.mainloop()

Many people find that a pure procedural style is not an effective way to write code, so they might choose to write this in an object-oriented style. It’s natural to think of «the app» as a singleton object. There are many ways to do this — the one in your question is, unfortunately, not one of the clearer ways to do it.

A slightly better way, IMO, would be to structure the code like this:

class App(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        <your widgets go here>
app = App()
app.mainloop()

In this case, mainloop is still being called, though now it’s a method of App since App inherits from Tk. It is conceptually the same as root.mainloop() since in this case, app is the root window even though it goes by a different name.

So, in both cases, mainloop is a method that belongs to the root window. And in both cases, it must be called for the GUI to function properly.

There is a third variation which is what the code you picked is using. And with this variation, there are several ways to implement it. The variation is your question uses a class to define the GUI, but does not inherit from Tk. This is perfectly fine, but you still must call mainloop at some point. Since you don’t create (or inherit) a mainloop function in your class, you must call the one associated with the root window. The variations I speak of are how and where the instance of App is added to the root window, and how mainloop is ultimately called.

Personally I prefer that App inherits from Frame, and that you pack the app outside the definition of the app. The template I use looks like this:

class App(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        <your widgets go here>

if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    app.pack(fill="both", expand=True)
    root.mainloop()

In this final example, app and root are two completely different objects. app represents a frame that exists inside the root window. Frames are commonly used this way, as a container for groups of other widgets.

So, in all cases, mainloop must be called. where it is called, and how, depends a bit on your coding style. Some people prefer to inherit from the root window, some don’t. In either case, you must call the mainloop function of the root window.

Summary: in this tutorial, you’ll learn step by step how to develop the Tkinter “Hello, World!” program.

Creating a window

 tkinter  tk

root = tk.Tk()
root.mainloop()  
Python tkinter что такое root

How it works.

First, import the tkinter module as tk to the program:

 tkinter  tk  

Second, create an instance of the tk.Tk class that will create the application window:

root = tk.Tk()  

By convention, the main window in Tkinter is called root. But you can use any other name like main.

Third, call the mainloop() method of the main window object:

  

The mainloop() keeps the window visible on the screen. If you don’t call the mainloop() method, the window will display and disappear immediately. It will be so fast that you may not see its appearance.

Also, the mainloop() method keeps the window displaying and running until you close it.

Typically, you place the call to the mainloop() method as the last statement in a Tkinter program, after creating the widgets.

Troubleshooting

ImportError: No  named Tkinter  
sudo apt- install python3-tk  

Displaying a label

Now, it’s time to place a component on the window. In Tkinter, components are called widgets.

 tkinter  tk


root = tk.Tk()

# place a label on the root window
message = tk.Label(root, text=)
message.pack()

# keep the window displaying
root.mainloop()  
Tkinter Hello World

How it works.

widget = WidgetName(container, **options)  

In this syntax:

  • The container is the parent window or frame where you want to place the widget.
  • The options is one or more keyword arguments that specify the configurations of the widget.
message = tk.Label(root, text=)  
  

Fixing the blur UI on Windows

If you find the text and UI are blurry on Windows, you can use the ctypes Python library to fix it.

First import the ctypes module:

 ctypes  windll  

Second, call the SetProcessDpiAwareness() function:

  
:
     ctypes  windll

    windll.shcore.SetProcessDpiAwareness()
:
    root.mainloop()  

Summary

  • Import tkinter module to create a Tkinter desktop application.
  • Use Tk class to create the main window and call the mainloop() method to keep the window displays.
  • In Tkinter, components are called widgets.

Did you find this tutorial helpful ?

Summary: in this tutorial, you’ll learn how to manipulate various attributes of a Tkinter window.

Let’s start with a simple program that consists of a window:

 tkinter  tk

root = tk.Tk()
root.mainloop()  

The root window has a title that defaults to tk. It also has three system buttons including Minimize, Maximize, and Close.

Let’s learn how to change the attributes of the root window.

Changing the window title

To change the window’s title, you use the title() method like this:

  
 tkinter  tk

root = tk.Tk()
root.title('Tkinter Window Demo')

root.mainloop()  
Python tkinter что такое root

To get the current title of a window, you use the title() method with no argument:

title = window.title()  

Changing window size and location

In Tkinter, the position and size of a window on the screen is determined by geometry.

  
Tkinter Window Geometry

In this specification:

  • The width is the window’s width in pixels.
  • The height is the window’s height in pixels.
  • The x is the window’s horizontal position. For example, +50 means the left edge of the window should be 50 pixels from the left edge of the screen. And -50 means the right edge of the window should be 50 pixels from the right edge of the screen.
  • The y is the window’s vertical position. For example, +50 means the top edge of the window should be 50 pixels below the top of the screen. And -50 means the bottom edge of the window should be 50 pixels above the bottom of the screen.

To change the size and position of a window, you use the geometry() method:

  
 tkinter  tk


root = tk.Tk()
root.title('Tkinter Window Demo')
root.geometry()

root.mainloop()  
  

How it works.

  • First, get the screen width and height using the winfo_screenwidth() and winfo_screenheight() methods.
  • Second, calculate the center coordinate based on the screen and window width and height.
  • Finally, set the geometry for the root window using the geometry() method.
Дополнительно:  Блокировать рекламу на андроиде в приложениях без root прав

If you want to get the current geometry of a window, you can use the geometry() method without providing any argument:

  

Resizing behavior

By default, you can resize the width and height of a window. To prevent the window from resizing, you can use the resizable() method:

  

The resizable() method has two parameters that specify whether the width and height of the window can be resizable.

 tkinter  tk

root = tk.Tk()
root.title('Tkinter Window Demo')
root.geometry()
root.resizable(, )

root.mainloop()  
Python tkinter что такое root

When a window is resizable, you can specify the minimum and maximum sizes using the minsize() and maxsize() methods:

window.minsize(min_width, min_height)
window.maxsize(min_height, max_height)  

Transparency

Tkinter allows you to specify the transparency of a window by setting its alpha channel ranging from 0.0 (fully transparent) to 1.0 (fully opaque):

  
 tkinter  tk

root = tk.Tk()
root.title('Tkinter Window Demo')
root.geometry()
root.resizable(, )
root.attributes(, )

root.mainloop()  
Python tkinter что такое root

Window stacking order

The window stack order refers to the order of windows placed on the screen from bottom to top. The closer window is on the top of the stack and it overlaps the one lower.

To ensure that a window is always at the top of the stacking order, you can use the -topmost attribute like this:

  

To move a window up or down of the stack, you can use the lift() and lower() methods:

  
 tkinter  tk


root = tk.Tk()
root.title('Tkinter Window Demo')
root.geometry()
root.resizable(, )
root.attributes(, )

root.mainloop()  

Changing the default icon

  • Prepare an image in the .ico format. If you have the image in other formats like png or jpg, you can convert it to the .ico format. There are many online tools that allow you to do it quite easily.
  • Place the icon in a folder that can be accessible from the program.
  • Call the iconbitmap() method of the window object.
  

If you want to use the above icon, you can download it to your computer:

Python tkinter что такое root

Summary

  • Use the title() method to change the title of the window.
  • Use the geometry() method to change the size and location of the window.
  • Use the resizable() method to specify whether a window can be resizable horizontally or vertically.
  • Use the window.attributes('-alpha',0.5) to set the transparency for the window.
  • Use the window.attributes('-topmost', 1) to make the window always on top.
  • Use lift() and lower() methods to move the window up and down of the window stacking order.
  • Use the iconbitmap() method to change the default icon of the window.

Did you find this tutorial helpful ?

Summary: in this tutorial, you’ll learn how to apply object-oriented programming in Tkinter to make the code more organized.

 tkinter  tk
root = tk.Tk()
root.mainloop()  

When the program is getting more complex, you can use an object-oriented programming approach to make the code more organized.

 tkinter  tk



    
        super().__init__()


 __name__ == :
    app = App()
    app.mainloop()  

How it works.

  • First, define an App class that inherits from the tk.Tk class. Inside the __init__() method, call the __init__() method of the tk.Tk class.
  • Second, create a new instance of the App class and call the mainloop() method to display the root window.

Another example of an object-oriented window in Tkinter

  

How it works.

  • First, create a label and button in the __init__() method of App class.
  • Second, assign the button_clicked() method to the command option of the button. Inside the button_clicked() method, display a message box.
  • Third, move the application bootstrapping to the if __name__ = "main" block.

Summary

  • Use an object-oriented programming approach to make the code more organized.
  • Define a class that inherits from the tk.Tk class. Always, call the super().__init__() from the parent class in the child class.

Did you find this tutorial helpful ?

    /
  • Переводы документации
  • /

  • Документация Python 3.8.8 /
  • Стандартная библиотека Python /
  • Графические пользовательские интерфейсы с Tk /
  • — Python интерфейс для Tcl/Tk

Пакет («интерфейс Tk») — стандартный интерфейс Python для
набора инструментов Tk GUI. И Tk, и доступны на большинстве
платформ Unix, а также в системах Windows. (Сам Tk не является частью Python;
он поддерживается в ActiveState.)

Запуск из командной строки должен открыть окно,
демонстрирующее простой интерфейс Tk, сообщающее, что правильно
установлен в вашей системе, а также установленную версию Tcl/Tk, чтобы вы
могли прочитать документацию по Tcl/Tk к нужной версии.

Модули Tkinter

В большинстве случаев — всё, что вам действительно нужно,
но также доступен ряд дополнительных модулей. Интерфейс Tk расположен в
двоичном модуле с именем . Этот модуль содержит низкоуровневый
интерфейс для Tk и никогда не должен использоваться непосредственно прикладными
программистами. Обычно является разделяемой библиотекой (или DLL), но в некоторых
случаях может статически связываться с интерпретатором Python.

Помимо интерфейсного модуля Tk, включает в себя ряд модулей
Python, из которых является одним из наиболее важных.
Импорт автоматически импортирует ,
поэтому, как правило, для использования Tkinter вс`, что вам нужно — это
простой оператор импорта:

class tkinter.TkscreenName=None, baseName=None, className=’Tk’, useTk=1

Класс создаётся без аргументов. Создаёт виджет верхнего уровня
Tk, который обычно является главным окном приложения. У каждого экземпляра
свой собственный интерпретатор Tcl.

tkinter.TclscreenName=None, baseName=None, className=’Tk’, useTk=0

Функция — функция фабрика, которая создаёт объект, очень
похожий на объект, созданный классом , за исключением того, что он
не инициализирует подсистему Tk. Чаще всего полезна при управлении
интерпретатором Tcl в среде, где не нужно создавать посторонние окна верхнего
уровня или где нельзя (например, системы Unix/Linux без X-сервера). Для
объекта, созданного объектом , может создано окно верхнего
уровня (и инициализирована подсистема Tk) путём вызова его метода
.

Другие модули, обеспечивающие поддержку Tk, включают:

Текстовый виджет со встроенной вертикальной полосой прокрутки.
Диалог, позволяющий пользователю выбрать цвет.
Базовый класс для диалогов, определенных в других модулях, перечисленных здесь.
Общие диалоговые окна, позволяющие пользователю указать файл для открытия или сохранения.
Утилиты, помогающие работать со шрифтами.
Доступ к стандартным диалоговым окнам Tk.
Основные диалоги и удобные функции.
Поддержка перетаскивания для . Экспериментальная возможность и должна
устареть при замене на Tk DND.
Черепашья графика в окне Tk.

Спасательный круг Tkinter

Этот раздел не является исчерпывающим руководством по Tk или Tkinter. Скорее,
он предназначен для предоставления некоторой вводной информации о системе.

  • Tk был написан Джоном Остерхаутом в Беркли.
  • Tkinter написали Стин Лумхольт и Гвидо ван Россум.
  • Этот Спасательный круг был написан Мэттом Конвеем из Университета Вирджинии.
  • Рендеринг HTML и некоторое свободное редактирование были произведены из
    версии FrameMaker Кеном Манхеймером.
  • Фредрик Лунд разработал и изменил описания интерфейсов классов, чтобы они
    соответствовали Tk 4.2.
  • Майк Кларксон преобразовал документацию в LaTeX и скомпилировал главу
    «Пользовательский интерфейс» справочного руководства.

Как пользоваться этим разделом

Этот раздел состоит из двух частей: первая половина (примерно) охватывает
справочный материал, а вторая половина может использоваться клавиатурой в
качестве удобного справочника.

При попытке ответить на вопросы вида «как мне сделать что-то» часто лучше узнать,
как выполнить «что-то» в прямом Tk, а затем преобразовать его обратно в
соответствующий вызов . Программисты Python часто могут угадать
правильную команду Python, просмотрев документацию Tk. Это означает, что для
использования Tkinter вам нужно немного узнать о Tk. Этот документ не
может выполнять эту роль, поэтому лучшее, что мы можем сделать — указать
вам на лучшую существующую документацию. Вот несколько подсказок:

  • Авторы настоятельно рекомендуют получить копию man страниц Tk. В
    частности, наиболее полезны man страницы в каталоге .
    Man страницы рассказывают о C интерфейсе к библиотеке Tk и поэтому
    не особенно полезны для авторов сценариев.
  • Аддисон-Уэсли издаёт книгу Джона Остерхаута «Tcl and Tk Toolkit» (ISBN
    0-201-63337-X), которая является хорошим знакомством с Tcl и Tk для новичков.
    Книга не является исчерпывающей и по многим деталям относится к страницам
    руководства.
  • — это последнее средство для большинства,
    но может быть хорошим местом, когда ничто другое не имеет смысла.

Простая программа Hello World

   

 
      
        
          
        
        

     
          
          
          
        

            
                              
        

     
        "hi there, everyone!"

  
  

(Очень) Быстрый взгляд на Tcl/Tk

Иерархия классов выглядит сложной, но на практике программисты приложений почти
всегда обращаются к классам в самом низу иерархии.

  • Классы предназначены для организации определенных функций в одном
    пространстве имён. Они не предназначены для независимого создания
    экземпляров.
  • Класс предназначен для однократного создания экземпляра в
    приложении. Прикладным программистам не нужно создавать один экземпляр явно,
    система создаёт его всякий раз, когда инстанцируется любой из классов.
  • Класс не предназначен для создания экземпляров, он
    предназначен только для создания подклассов для создания «настоящих» виджетов
    (в C ++ это называется «абстрактный класс»).

Чтобы использовать этот справочный материал, будут моменты, когда вам нужно
будет знать, как читать короткие отрывки Tk и как идентифицировать различные
части команды Tk. (См. раздел Отображение базового Tk в Tkinter для
эквивалентов того, что ниже.)

Скрипты Tk — программы Tcl. Как и все программы на Tcl, сценарии Tk
представляют собой просто списки токенов, разделенных пробелами. Виджет Tk —
просто его класс, помогающие его настроить опции, и действия,
заставляющие его выполнять полезные вещи.

Чтобы сделать виджет в Tk, у команды есть всегда следующий вид:

  
classCommand
обозначает, какой виджет создать (кнопка, метка, меню …)
newPathname
новое имя для этого виджета. Все имена в Tk должны быть уникальными. Чтобы
обеспечить это, виджеты в Tk именуются pathnames, как файлы в файловой
системе. Виджет верхнего уровня, корневой, называется (точка), а дочерние
элементы разделены несколькими точками. Например,
может быть именем виджета.
options
настроить внешний вид виджета и, в некоторых случаях, его поведение. Параметры
представлены в виде списка флагов и значений. Флагам предшествует «-», как и
флагам команд оболочки Unix, а значения помещаются в кавычки, если они состоят
более чем из одного слова.
         
               \
                          
                
        

После создания путь к виджету становится новой командой. Новая команда
виджета
— ручка программиста, которая заставляет новый виджет выполнять
некоторые действие. В C вы бы выразили это как someAction (fred, someOptions),
в C++ вы бы выразили это как fred.someAction (someOptions), а в Tk, вы скажете:

  

Обратите внимание, что имя объекта начинается с точки.

Как и следовало ожидать, допустимые значения для someAction будут зависеть от
класса виджета: работает, если fred — кнопка (fred
становится серым), но не работает, если fred — ярлык (отключение ярлыков
не поддерживается в Tk. ).

Допустимые значения someOptions зависят от действия. Некоторые действия,
такие как , не требуют аргументов, другие, например, команда
текстового поля ввода, потребуют аргументов, чтобы указать, какой
диапазон текста удалить.

Отображение базового Tk в Tkinter

Команды класса в Tk соответствуют конструкторам классов в Tkinter.

                     

Мастер объекта подразумевается в новом имени, присвоенном ему во время
создания. В Tkinter мастера указываются явно.

               

Параметры конфигурации в Tk представлены в виде списков тегов с дефисом, за
которыми следуют значения. В Tkinter параметры указываются как ключевые
аргументы в конструкторе экземпляра и ключевые аргументы для вызовов
конфигурации или как индексы экземпляра в стиле словаря для установленных
экземпляров. См. раздел о возможностях
настройки.

                
            
                               

В Tk, чтобы выполнить действие с виджетом, используйте имя виджета в качестве
команды и следуйте за ним именем действия, возможно, с аргументами
(параметрами). В Tkinter вы вызываете методы в экземпляре класса, чтобы вызвать
действия в виджете. Действия (методы), которые может выполнять данный виджет,
перечислены в .

                   

Чтобы передать виджет упаковщику (менеджеру геометрии), вы вызываете pack с
необязательными аргументами. В Tkinter класс Pack содержит всю
функциональность, а различные формы команды pack реализованы как методы. Все
виджеты в являются производными от Packer, поэтому наследуют все
методы упаковки. Дополнительную информацию о менеджере геометрии форм см. в
документации модуля .

            

Как связаны Tk и Tkinter

Ваше приложение здесь (Python)
Приложение Python выполняет вызов .
tkinter (пакет Python)
Этот вызов (например, создание виджета-кнопки) реализован в
пакете , написанный на Python. Python
функция проанализирует команды и аргументы и преобразует их в файл
формы, которая заставляет их выглядеть так, как если бы они были взяты из сценария Tk, а не
скрипта Python.
_tkinter (С)
Эти команды и их аргументы будут переданы функции C в
— обратите внимание на подчеркивание — это модуль расширения.
Виджеты Tk (C и Tcl)
Функция C может вызывать другие модули C, включая C
функции, составляющие библиотеке Tk. Tk реализован в C и некоторых Tcl.
Часть Tcl виджетов Tk используется для привязки к определенному поведению по умолчанию
виджеты и выполняется один раз в точке, где Python
пакет был импортирован. (Пользователь никогда не видит этот этап).
Tk (C)
Часть Tk виджетов Tk реализует окончательное отображение в …
Xlib (C)
библиотека Xlib для рисования графики на экране.
Дополнительно:  3 Major Problems With Tree Roots in Gardens

Удобный справочник

Параметры настройки

Параметры управляют такими вещами, как цвет и ширина границы виджета. Параметры
можно установить тремя способами:

Во время создания объекта с использованием ключевых аргументов
    
После создания объекта обработка имени параметра как словарного указателя
  
  
Используйте метод config() для обновления нескольких атрибутов после создания объекта
 

Полное объяснение данной опции и её поведения см. на страницах руководства Tk
для рассматриваемого виджета.

Обратите внимание, что на man страницах перечислены «СТАНДАРТНЫЕ ОПЦИИ»
и «СПЕЦИАЛЬНЫЕ ОПЦИИ ВИДЖЕТА» для каждого виджета. Первый — список опций,
общих для многих виджетов, второй — опции, которые уникальны для этого
виджета. Стандартные параметры задокументированы на man странице
options(3).

В этом документе не делается различий между стандартными и специфическими для
виджета опциями. Некоторые параметры не применимы к некоторым видам виджетов.
Реагирует ли данный виджет на опцию, зависит от класса виджета;
у кнопок есть опция , у ярлыков — нет.

Параметры, поддерживаемые данным виджетом, перечислены на man странице
этого виджета или могут быть запрошены во время выполнения, вызвав метод
без аргументов или вызвав метод для этого виджета.
Возвращаемое значение этих вызовов — словарь, ключ которого представляет
собой имя параметра в виде строки (например, ), а значения —
5-кортежи.

Некоторые параметры, например , являются синонимами общих параметров с
длинными именами ( — сокращение от «background»). При передаче методу
имя сокращенной опции вернёт кортеж из двух, а не из пяти.
2-кортеж, переданный обратно, будет содержать имя синонима и «реальную» опцию
(например, ).



Конечно, напечатанный словарь будет включать все доступные параметры и их
значения. Это сделано только в качестве примера.

Упаковщик

Упаковщик является одним из механизмов управления геометрией Tk. Менеджеры
геометрии используются для указания относительного позиционирования виджетов
внутри их контейнера — их общего главного (master). В отличие от более громоздкого
россыпь (placer) (который используется реже и мы здесь не рассматриваем), пакер
принимает качественные характеристики отношения: выше, слева от,
заполнение и т. д. — и прорабатывает всё, чтобы определить точные координаты
размещения для вас.

Размер любого главного виджета определяется размером «подчиненных виджетов»
внутри. Упаковщик используется для управления местом появления подчиненных
виджетов внутри главного, в которое они упакованы. Вы можете упаковать виджеты
в фреймы, а фреймы в другие фреймы, чтобы получить желаемый вид макета. Кроме
того, компоновка динамически регулируется для внесения дополнительных изменений
в конфигурацию после её упаковки.

Обратите внимание, что виджеты не появляются, пока их геометрия не указана с
помощью менеджера геометрии. Ранняя распространенная ошибка — не учитывать
спецификацию геометрии, а затем удивляться, когда виджет создаётся, но ничего
не появляется. Виджет появится только после того, как к нему будет применен,
например, метод упаковщика .

Метод pack() может вызваться с парами ключевой параметр/значение,
которые определяют, где должен отображаться виджет в своем контейнере и как он
должен себя вести при изменении размера главного окна приложения. Вот несколько
примеров:

                     # по умолчанию в side="top"


Опции упаковщика

Для получения более подробной информации о упаковщике и возможных вариантах см.
man страницы и страницу 183 книги Джона Остерхаута.

anchor
Тип якоря. Обозначает, куда упаковщик должен поместить каждое ведомое
в своей посылке.
expand
Логическое, или .
fill
Допустимые значения: , , , .
ipadx и ipady
Расстояние — обозначение внутреннего отступа с каждой стороны подчинённого виджета.
padx и pady
Расстояние — обозначение внешнего отступа с каждой стороны подчинённого виджета.
side
Допустимые значения: , , , .

Связь переменных виджета

Настройка текущего значения некоторых виджетов (например, виджетов ввода
текста) может напрямую связываться с переменными приложения с помощью
специальных параметров. Это варианты , ,
, и . Данное соединение работает в обоих
направлениях: если переменная изменяется по какой-либо причине, виджет, к
которому она подключена, будет обновлён, чтобы отразить новое значение.

К сожалению, в текущей реализации невозможно передать
произвольную переменную Python виджету с помощью параметра или
. Единственные типы переменных, для которых это работает, —
являющиеся подклассами класса Variable переменные, определённые в
.

Уже определено множество полезных подклассов переменной: ,
, и . Чтобы прочитать
текущее значение такой переменной, вызвать для неё метод , а для
изменения её значения вызвать метод . Если вы будете следовать
этому протоколу, виджет всегда будет отслеживать значение переменной без вашего
дальнейшего вмешательства.

   

 
      
        
        

          
        

        # Создать переменную приложения.
          
        # Установить для неё какое-нибудь значение.
        "this is a variable"
        # Сказать виджету ввода, чтобы он следил за этой переменной.
          

        # Определить обратный вызов, когда пользователь нажимает return.
        # Он печатает текущее значение переменной.
        
                             

      
        "Hi. The current entry content is:"
              

  
  

Оконный менеджер

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

Чтобы попасть в окно верхнего уровня, содержащее данный виджет, вы часто можете
просто обратиться к главному виджета. Конечно, если виджет был упакован внутри
фрейма, главный не будет представлять окно верхнего уровня. Чтобы попасть в окно
верхнего уровня, содержащее произвольный виджет, вы можете вызвать метод
. Этот метод начинается с подчеркивания, чтобы обозначить тот
факт, что функция является частью реализации, а не интерфейсом к
функциональности Tk.

Вот несколько примеров типичного использования:

   

 
      
        
        

# создать приложение
  


# вот вызовы метода для класса менеджера окон

"My Do-Nothing Application"
 

# запустить программу

Типы данных Tk Option

anchor
Допустимые значения — точки компаса: , , , ,
, , , , а также .
bitmap
Имеется восемь встроенных именованных растровых изображений: , ,
, , , , ,
. Чтобы указать имя файла растрового изображения X, укажите
полный путь к файлу
начиная с , как в .
boolean
Вы можете передавать целые числа 0 или 1 или строки или .
callback

Любая функция Python, которая не принимает аргументов. Например:

 
    
  
color
Цвета могут задаваться как названия цветов X в файле rgb.txt или как строки
представление значений RGB в 4-битном формате: , 8-битное: ,
12-битное «
или 16-битные диапазоны , где R, G, B
представляют собой любую допустимую шестнадцатеричную цифру. См. подробности на странице 160 книги Оустерхаута.
cursor
Стандартные имена курсоров X из можно использовать без
префикса . Например, чтобы получить курсор в виде руки (), используйте
строку . Вы также можете указать собственный файл растрового изображения и маски.
См. страницу 179 книги Оустерхаута.
distance
Расстояния экрана могут указываться в пикселях или в абсолютных расстояниях.
Пиксели даны в виде чисел, а абсолютные расстояния — в виде строк с завершением
единицы обозначения символов: для сантиметров, для дюймов, для
миллиметры, для принтер поинтов. Например, 3.5 дюйма выражается
как .
font
Tk использует формат имени шрифта списка, например . Размеры шрифта с
положительные числа измеряются в поинтах; размеры с отрицательными числами
измеряется в пикселях.
geometry
Строка вида , где ширина и высота
измеряется в пикселях для большинства виджетов (в символах для виджетов, отображающих текст).
Например: .
justify
Допустимыми значениями являются строки: , , и .
region
Строка с четырьмя элементами, разделенными пробелами, каждый из которых является допустимым
расстояние (см. выше). Например: и и
— все допустимые регионы.
relief
Определяет, каким будет стиль границы виджета. Допустимые значения есть:
, , , и .
scrollcommand
Почти всегда метод какого-нибудь виджета с полосой прокрутки, но может
быть любым методом виджета, который принимает единственный аргумент.
wrap:
Должен принимать одно значение из: , или .

Привязки и события

Метод bind из команды виджета позволяет вам отслеживать определенные события и
запускать функцию обратного вызова при возникновении этого типа события. Форма
метода bind::

    
sequence
строка, обозначающая целевой тип события. (См. страницу руководства по связыванию и
стр. 201 книги Джона Остерхаута для деталей).
func
функция Python, которая принимает один аргумент и вызывается при возникновении события.
Экземпляр события будет передан в качестве аргумента. (Функции, развернутые таким образом
обычно известны как обратные вызовы.)
add
не является обязательным, либо , либо . Означает, что передаётся
пустая строка
привязка предназначена для замены любых других привязок, связанных с событием.
Передача означает, что функция должна добавляться в список
функций, связанных с данным типом события.
  
      

 

Обратите внимание, как осуществляется доступ к полю виджета события в обратном
вызове . Данное поле содержит перехватывающее событие X виджет.
В следующей таблице перечислены другие поля событий, к которым вы можете
получить доступ, и их обозначение в Tk, что может быть полезно при обращении к
man страницам Tk.

Параметр index

Для ряда виджетов требуется передача «index» параметров. Они используются
для указания на определенное место в виджете «Text», или на определенные
символы в виджете «Entry», или на определенные пункты меню в виджете «Menu».

Индексы виджетов Entry (индекс, индекс просмотра и т. д.)
У виджетов Entry есть параметры, которые относятся к позициям символов в тексте
отображается. Вы можете использовать функции для доступа к этим специальным
точкам в текстовых виджетах:
Индексы Text виджетов
Обозначение индекса для Text виджетов очень богато и лучше всего описано в man
Tk страницах.
Индексы Menu (menu.invoke(), menu.entryconfig() и т. д.)

Некоторые параметры и методы для меню управляют определенными пунктами меню.
В любое время, когда для опции или параметра требуется индекс меню, вы можете передать:

  • целое число, которое относится к числовой позиции записи в виджете,
    отсчитываемой сверху, начиная с 0;
  • относящаяся к позиции меню строка , которая в данный
    момент находится под курсором;
  • относящаяся к последнему пункту меню строка ;
  • целое число, которому предшествует , как в , где целое число
    интерпретируется как координата y пикселя в системе координат меню;
  • строка , которая указывает на отсутствие пункта меню вообще;
    чаще всего используется с menu.activate() для деактивации всех записей и,
    наконец,
  • текстовая строка, шаблон которой совпадает с меткой записи меню,
    сканированной от верхней части меню до нижней. Обратите внимание, что этот
    тип индекса рассматривается после всех остальных, что означает, что
    совпадения для пунктов меню с метками , или
    могут интерпретироваться как приведённые выше литералы.

Изображения

Изображения разных форматов можно создавать с помощью соответствующего
подкласса :

  • для изображений в формате XBM.
  • для изображений в форматах PGM, PPM, GIF и PNG. Последний
    поддерживается начиная с Tk 8.6.

Изображение любого типа создаётся с помощью параметра или (также
доступны другие варианты).

Затем объект изображения можно использовать везде, где параметр
поддерживается некоторым виджетом (например, метки, кнопки, меню). В этих
случаях Tk не будет сохранять ссылку на изображение. Когда последняя ссылка
Python на объект изображения удаляется, данные изображения также удаляются, и
Tk будет отображать пустое поле везде, где использовалось изображение.

Пакет Pillow добавляет поддержку таких
форматов, как BMP, JPEG, TIFF и WebP, среди прочих.

Обработчики файлов

 
  
    
  


Функция недоступна в Windows.

Поскольку вы не знаете, сколько байтов доступно для чтения, вы можете не
захотеть использовать методы или
, или
, поскольку они будут настаивать на чтении заранее
определенного количества байтов. Для сокетов подойдут методы
или ; для других
файлов использовать необработанное чтение или
.

Widget.tk.createfilehandlerfile, mask, func

Регистрирует функцию обратного вызова обработчика файлов func. Аргумент
file может быть либо объектом с методом
(например, файлом или объектом сокета), либо целочисленным файловым
дескриптором. Аргумент mask представляет собой комбинацию по ИЛИ любой из
трёх констант ниже. Обратный вызов вызывается следующим образом:

Widget.tk.deletefilehandlerfile

Отменяет регистрацию обработчика файлов.

tkinter.READABLE
tkinter.WRITABLE
tkinter.EXCEPTION

Константы, используемые в аргументах mask.

Оцените статью
Master Hi-technology
Добавить комментарий