Как изменить название окна в tkinter
Основным компонентом графических программ является окно. Затем в окно добавляются все остальные компоненты графического интерфейса. В Tkinter окно представлено классом Tk . Например, создание окна:
root = Tk()
Для отображения окна и взаимодействия с пользователем у окна вызывается метод mainloop()
from tkinter import * root = Tk() root.mainloop()
Класс Tk обладает рядом методов и атрибутов, которые позволяют установить различные аспекты окна. Некоторые из них.
Размеры и начальная позиция окна
По умолчанию окно имеет некоторые стандартные размеры. Для установки размеров используется метод geometry() . Например, определение окна с шириной в 300 единиц и высотой 250 единиц:
from tkinter import * root = Tk() root.geometry("300x250") root.mainloop()
По умолчанию окно позиционируется в верхний левый угол экрана с небольшим смещением. Но мы можем изменить его положение, передав нужные значения в метод geometry() :
from tkinter import * root = Tk() root.geometry("300x250+400+200") root.mainloop()
Теперь строка в методе geometry имеет следующий формат: «Ширина x Высота + координатаX + координатаY». То есть при запуске окно шириной в 300 единиц и высотой 250 единиц будет находиться на 400 пикселей вправо и на 200 пикселей вниз от верхнего левого угла экрана.
Для получения данных о размере и позиции также можно использовать метод geometry() , который возвращает данные значения в виде строки в формате «widthxheight+x+y»:
from tkinter import * root = Tk() root.geometry("300x250+400+200") root.update_idletasks() print(root.geometry()) # "300x250+400+200" root.mainloop()
Чтобы приложение еще до метода mainloop() принименило для окна переданные ему значения по ширине, высоте и позиции, вызывается метод root.update_idletasks() . В итоге вызов root.geometry() возвратить строку «300×250+400+200»
По умолчанию мы можем изменять размеры окна. Тем не менее иногда может потребоваться сделать размер окна фиксированным. В этом случае мы можем использовать метод resizable() . Его первый параметр указывает, может ли пользователь растягивать окно по ширине, а второй параметр — можно ли растягивать по высоте. Чтобы запретить растягивание по какой-либо стороне, необходимо для соответствующего параметра передать значение False . Например, запретим какое-либо изменение размеров:
from tkinter import * root = Tk() root.geometry("300x250") root.resizable(False, False) root.mainloop()
Также можно установить минимальные и максимальные размеры окна:
root.minsize(200,150) # минимальные размеры: ширина - 200, высота - 150 root.maxsize(400,300) # максимальные размеры: ширина - 400, высота - 300
Установка заголовка
По умолчанию заголовок окна — «tk». Для установки заголовка применяется метод title() , в который передается текст заголовка:
from tkinter import * root = Tk() root.title("Hello METANIT.COM") root.geometry("300x250") root.mainloop()

Установка иконки
Перед заголовком отображается иконка. По умолчанию это иконка пера. С помощью метода iconbitmap() можно задать любую другую иконку. Например, определим в одной папке с файлом приложения какой-нибудь файл с иконкой, допустип, он называется «favicon.ico» и используем его для установки иконки:
from tkinter import * root = Tk() root.title("Hello METANIT.COM") root.iconbitmap(default="favicon.ico") root.geometry("300x250") root.mainloop()
через параметр default в метод iconbitmap передается путь к иконки. В данном случае файл иконки располагается с файлом приложения в одной папке, поэтому в качестве пути указывается просто имя файла.

В качестве альтернативы для установки иконки также можно было бы использовать метод iconphoto()
from tkinter import * root = Tk() root.geometry("250x200") root.title("Hello METANIT.COM") icon = PhotoImage(file = "icon2.png") root.iconphoto(False, icon) root.mainloop()
Первый параметр метода iconphoto() указывает, надо ли использовать иконку по умолчанию для всех окон приложения. Второй параметр — объект PhotoImage, который собственно и устанавливает файл изображения (здесь файл «icon2.png)
Однако что, если мы хотим, чтобы окно вообще не имело иконки? В этом случае можно определить прозрачную иконку и также ее подключать. Можно это сделать также динамически без наличия реального файла:
from tkinter import * import tempfile, base64, zlib ICON = zlib.decompress(base64.b64decode("eJxjYGAEQgEBBiDJwZDBysAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc=")) _, ICON_PATH = tempfile.mkstemp() with open(ICON_PATH, "wb") as icon_file: icon_file.write(ICON) root = Tk() root.title("Hello METANIT.COM") root.geometry("300x250") root.iconbitmap(default=ICON_PATH) root.mainloop()
В данном случае создается временный файл иконки в памяти.
Перехват закрытия окна
from tkinter import * def finish(): root.destroy() # ручное закрытие окна и всего приложения print("Закрытие приложения") root = Tk() root.geometry("250x200") root.title("Hello METANIT.COM") root.protocol("WM_DELETE_WINDOW", finish) root.mainloop()
Первый параметр метода protocol() представляет имя события, в данном случае это «WM_DELETE_WINDO». Второй параметр представляет функцию, которая вызывается при возникновении события. Здесь эта функция finish() , в котором с помощью метода destroy() вручную вызываем закрытие окна (а с ним и всего приложения), а затем выводим на консоль некоторое сообщение.
Атрибуты окна
С помощью специального метода attributes() можно установать отдельные атрибуты окна, для которых нет специальных методов. В качестве первого параметра метод принимает название атрибута, которое предваряется дефисом. А второй параметр — значение для этого атрибута. Например, растяжение окна на весь экран:
root.attributes("-fullscreen", True)
Здесь атрибуту fullscreen передается значение True, благодаря чему устанавливается полноэкранный режим.
Другой пример — установка прозрачности с помощью атрибута alpha :
root.attributes("-alpha", 0.5)
Значение 0.5 указывает на полупрозрачность.
Третий пример — отключение верхней панели окна (за исключением заголовка и крестика для закрытия):
root.attributes("-toolwindow", True)
Окна в tkinter
В этом уроке рассмотрим основные настройки окон, в которых располагаются виджеты. Обычные окна в Tkinter порождаются не только от класса Tk , но и Toplevel . От Tk принято создавать главное окно. Если создается многооконное приложение, то остальные окна создаются от Toplevel. Методы обоих классов схожи.
Размер и положение окна
По умолчанию окно приложения появляется в верхнем левом углу экрана. Его размер (ширина и высота) определяется совокупностью размеров расположенных в нем виджетов. В случае если окно пустое, то tkinter устанавливает его размер в 200 на 200 пикселей.
С помощью метода geometry можно изменить как размер окна, так и его положение. Метод принимает строку определенного формата.
from tkinter import * root = Tk() root.geometry('600x400+200+100') root.mainloop()
Первые два числа в строке-аргументе geometry задают ширину и высоту окна. Вторая пара чисел обозначает смещение на экране по осям x и y . В примере окно размерностью 600 на 400 будет смещено от верхней левой точки экрана на 200 пикселей вправо и на 100 пикселей вниз.
Если перед обоими смещениями вместо плюса указывается минус, то расчет происходит от нижних правых углов экрана и окна. Так выражение root.geometry(‘600×400-0-0’) заставит окно появиться в нижнем правом углу.
В аргументе метода geometry можно не указывать либо размер, либо смещение. Например, чтобы сместить окно, но не менять его размер, следует написать root.geometry(‘+200+100’) .
Бывает удобно, чтобы окно появлялось в центре экрана. Методы winfo_screenwidth и winfo_screenheight возвращают количество пикселей экрана, на котором появляется окно. Рассмотрим, как поместить окно в центр, если размер окна известен:
from tkinter import * root = Tk() w = root.winfo_screenwidth() h = root.winfo_screenheight() w = w // 2 # середина экрана h = h // 2 w = w - 200 # смещение от середины h = h - 200 root.geometry(f'400x400++') root.mainloop()
Здесь мы вычитаем половину ширины и высоты окна (по 200 пикселей). Иначе в центре экрана окажется верхний левый угол окна, а не его середина.
Если размер окна неизвестен, то его можно получить с помощью того же метода geometry , но без аргументов. В этом случае метод возвращает строку, содержащую сведения о размерах и смещении, из которой можно извлечь ширину и высоту окна.
from tkinter import * root = Tk() Button(text="Button", width=20).pack() Label(text="Label", width=20, height=3).pack() Button(text="Button", width=20).pack() root.update_idletasks() s = root.geometry() s = s.split('+') s = s[0].split('x') width_root = int(s[0]) height_root = int(s[1]) w = root.winfo_screenwidth() h = root.winfo_screenheight() w = w // 2 h = h // 2 w = w - width_root // 2 h = h - height_root // 2 root.geometry('+<>+<>'.format(w, h)) root.mainloop()
Метод update_idletasks позволяет перезагрузить данные об окне после размещения на нем виджетов. Иначе geometry вернет строку, где ширина и высота равняются по одному пикселю. Видимо таковы параметры на момент запуска приложения.
По умолчанию пользователь может разворачивать окно на весь экран, а также изменять его размер, раздвигая границы. Эти возможности можно отключить с помощью метода resizable . Так root.resizable(False, False) запретит изменение размеров главного окна как по горизонтали, так и вертикали. Развернуть на весь экран его также будет невозможно, при этом соответствующая кнопка разворота исчезает.

Заголовок окна
По умолчанию в заголовке окна находится надпись «tk». Для установки собственного названия используется метод title .
… root.title("Главное окно") …

Если необходимо, заголовок окна можно вообще убрать. В программе ниже второе окно ( Toplevel ) открывается при клике на кнопку, оно не имеет заголовка, так как к нему был применен метод overrideredirect с аргументом True . Через пять секунд данное окно закрывается методом destroy .
from tkinter import * def about(): a = Toplevel() a.geometry('200x150') a['bg'] = 'grey' a.overrideredirect(True) Label(a, text="About this").pack(expand=1) a.after(5000, lambda: a.destroy()) root = Tk() root.title("Главное окно") Button(text="Button", width=20).pack() Label(text="Label", width=20, height=3).pack() Button(text="About", width=20, command=about).pack() root.mainloop()

Практическая работа
Напишите программу, в которой на главном окне находятся холст и кнопка «Добавить фигуру». Кнопка открывает второе окно, включающее четыре поля для ввода координат и две радиокнопки для выбора, рисовать ли на холсте прямоугольник или овал. Здесь же находится кнопка «Нарисовать», при клике на которую соответствующая фигура добавляется на холст, а второе окно закрывается. Проверку корректности ввода в поля можно опустить.

Курс с примерами решений практических работ: pdf-версия
X Скрыть Наверх
Tkinter. Программирование GUI на Python
Как поменять название окна tkinter в Python?
Нужно сделать так чтобы название окна up_win меняло название на «ПРОКАЧКИ» когда нажимали на кнопку rus_button и меняло название на «UPGREDE» когда нажимали на кнопку eng_button.
символы (~) замените пробелами.
from tkinter import *
root = Tk()
root.geometry(‘300×200’)
root[‘bg’] = ‘#5f5f5f’
root.resizable(False, False)
root.title()
def settings():
~~~~window = Tk()
~~~~window.geometry(‘300×200’)
~~~~window[‘bg’] = ‘#5f5f5f’
~~~~window.resizable(False, False)
~~~~window.title()
~~~~rus_btn = Button(window, text=’русский’)
~~~~rus_btn.pack()
~~~~eng_btn = Button(window, text=’inglish’)
~~~~eng_btn.pack()
~~~~rus_btn[‘command’] = rus
~~~~eng_btn[‘command’] = eng
def upgrede():
~~~~up_win = Tk()
~~~~up_win.geometry(‘300×200’)
~~~~up_win[‘bg’] = ‘#5f5f5f’
~~~~up_win.resizable(False, False)
~~~~up_win.title()
settings = Button(root, text=’НАСТРОЙКИ’, command=settings)
settings.pack()
upgrede = Button(root, text=’ПРОКАЧКИ’, command=upgrede)
upgrede.pack()
Как сделать изменяемый заголовок в tkinter
Возможно ли сделать заголовок изменяемым, при открытии файла. К примеру при создании родительского окна сделать «название программы», а при загрузке какого-то файла, изменить текст в заголовке на «название программы — путь к загруженному файлу»
Отслеживать
задан 2 апр 2016 в 10:17
flatonfloor flatonfloor
43 1 1 серебряный знак 5 5 бронзовых знаков
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
Собственно, root.title = build_new_title() позволит изменить заголовок.
Думаю, правильный вопрос — как запускать это по определенным событиям? В таком случае — собственно, смотреть в следующую сторону, видимо : http://younglinux.info/tkinter/event.php
Отслеживать
ответ дан 2 апр 2016 в 20:58
Alexander Pozharskii Alexander Pozharskii
382 1 1 серебряный знак 12 12 бронзовых знаков
Спасибо большое, Вы все правильно поняли.
3 апр 2016 в 5:55
root = Tkinter.Tk() root.title = "bla-bla-bla"
Отслеживать
ответ дан 2 апр 2016 в 10:34
3,288 4 4 золотых знака 37 37 серебряных знаков 49 49 бронзовых знаков
Видимо Вы не совсем поняли, что я имею в виду. Представьте к примеру текстовый редактор. При запуске в заголовке надпись «Блокнот», Вы нажимаете пункт меню открыть файл, выбираете файл для открытия и после его загрузки в виджет ScrolledText заголовок окна меняется на «Блокнот — путь к файлу»
2 апр 2016 в 11:13
Нет, не понимаю. Поставьте вопрос более развернуто. Вы что, хотите изменить заголовок системной программы с помощью Tkinter?
2 апр 2016 в 11:28
Если у вас стоит windows запустите блокнот. В заголовке будет надпись «Безымянный — Блокнот». Нажмите открыть файл и выберите любой текстовый файл, заголовок измениться на «Название файла — Блокнот», вот такое мне и нужно реализовать в tkinter’e.
2 апр 2016 в 11:43
Вопрос не ясен! Ибо в моем первом ответе приведен рецепт изменения заголовка окон Tkinter! У меня Linux, и я совершенно не понимаю, при чем здесь блокнот!? Поставьте корректно задачу, например «Изменение заголовка окна Tk в Tkinter» или «Изменение заголовков системных программ с помощью Tkinter»! Иначе ответов вы не дождетесь.
2 апр 2016 в 11:51
Вот Вам примерчик изменения заголовка по нажатию разных кнопок. В рамках Ваших событий необходимо изменять root.title(»).
import tkinter as tk root=tk.Tk() root.title("Изначальное название заголовка") root.geometry("250x80") def name1(): root.title("Первое название") def name2(): root.title("Второе название") button1 = tk.Button(root, text='Меняем название на 1',font=('clearlyu', 10), command=name1) button2 = tk.Button(root, text='Меняем название на ',font=('clearlyu', 10), command=name2) button1.pack() button2.pack() root.mainloop()
Отслеживать
ответ дан 5 июн 2017 в 13:03
Kazantsev Andrey Kazantsev Andrey
36 5 5 бронзовых знаков
Вы очень непонятно cформулировали свой вопрос.
Очевидно,что никто вам не напишет дополнительный параметр или встроеннyю функцию,kоторая бы понималa,что вы открываете файл и озаглавливала бы окно соответствующим названием.Вы сами должны написать для этого код.
Вот пример простейшего обозревателя текстовых файлов,который меняет заголовок окна на путь к файлу с помощью метода title:
from tkinter import * from tkinter.filedialog import askopenfilename root=Tk() root.iconify() default_title='Средство просмотра текстовых файлов' def open_file(path=None): top=Toplevel(root) if path: top.title(default_title+' - '+path) #Та самая строка file=open(path,encoding='utf-8') ent=Text(top) ent.place(relwidth=1,relheight=1) ent.insert(END,file.read()) file.close() else: top.title(default_title) top.geometry('800x600') menu=Menu(top) top['menu']=menu filemenu=Menu(menu,tearoff=False) menu.add_cascade(label='File',menu=filemenu) def choose_file(): path=askopenfilename(filetypes=[("text files", ".txt")]) if path: open_file(path) filemenu.add_command(label='Open',command=choose_file) open_file() root.mainloop()