Как изменить название окна в tkinter
Перейти к содержимому

Как изменить название окна в tkinter

  • автор:

Окна в 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) запретит изменение размеров главного окна как по горизонтали, так и вертикали. Развернуть на весь экран его также будет невозможно, при этом соответствующая кнопка разворота исчезает.

resizable.png

Заголовок окна

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

… root.title("Главное окно")

root_title.png

Если необходимо, заголовок окна можно вообще убрать. В программе ниже второе окно ( 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()

overrideredirect

Практическая работа

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

Программа на tkinter

Курс с примерами решений практических работ: pdf-версия

X Скрыть Наверх

Tkinter. Программирование GUI на Python

Как изменить название окна в 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()

Заголовок и размеры окна в thinkter в Python

Установка иконки

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

Иконка окна в thinkter в Python

В качестве альтернативы для установки иконки также можно было бы использовать метод 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

Возможно ли сделать заголовок изменяемым, при открытии файла. К примеру при создании родительского окна сделать «название программы», а при загрузке какого-то файла, изменить текст в заголовке на «название программы — путь к загруженному файлу»

Отслеживать
задан 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,278 4 4 золотых знака 35 35 серебряных знаков 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() 

Как изменить название окна в tkinter

На этом шаге мы перечислим значения, определяющие тип окна .

При использовании класса QWidget окно по умолчанию создается с заголовком, в котором расположены значок, при нажатии на который выводится оконное меню, текст заголовка и кнопки Свернуть , Развернуть и Закрыть . Указать другой тип создаваемого окна позволяет метод setWindowFiags() или параметр flags в конструкторе класса QWidget . Обратите внимание, что метод setWindowFiags() должен вызываться перед отображением окна. Формат метода:

setWindowFiags (Тип окна>)

  • Widget — тип по умолчанию для класса QWidget ;
  • Window — указывает, что компонент является окном, независимо от того, имеет он родителя или нет. Окно выводится с рамкой и заголовком, в котором расположены кнопки Свернуть , Развернуть и Закрыть . По умолчанию размеры окна можно изменять с помощью мыши;
  • Dialog — диалоговое окно. Выводится с рамкой и заголовком, в котором расположены кнопки Справка и Закрыть . Размеры окна можно изменять с помощью мыши. Это значение по умолчанию для класса QDialog . Пример указания типа для диалогового окна: window.setWindowFlags(QtCore.Qt.Dialog) ;
  • Sheet и Drawer — окна в стиле Apple Macintosh ;
  • Popup — указывает, что окно представляет собой всплывающее меню. Оно выводится без рамки и заголовка и, кроме того, может отбрасывать тень. Изменить размеры окна с помощью мыши нельзя;
  • Tool — сообщает, что окно представляет собой панель инструментов. Оно выводится с рамкой и заголовком (меньшем по высоте, чем обычное окно), в котором расположена кнопка Закрыть . Размеры окна можно изменять с помощью мыши;
  • ToolTip — указывает, что окно представляет собой всплывающую подсказку. Оно выводится без рамки и заголовка. Изменить размеры окна с помощью мыши нельзя;
  • splashScreen — сообщает, что окно представляет собой заставку. Оно выводится без рамки и заголовка. Изменить размеры окна с помощью мыши нельзя. Это значение по умолчанию для класса QSplashScreen ;
  • Desktop — указывает, что окно представляет собой рабочий стол. Оно вообще не отображается на экране;
  • SubWindow — сообщает, что окно представляет собой дочерний компонент, независимоот того, имеет он родителя или нет. Выводится оно с рамкой и заголовком (меньшим по высоте, чем у обычного окна), но без кнопок. Изменить размеры окна с помощью мыши нельзя;
  • ForeignWindow — указывает, что окно создано другим процессом;
  • CoverWindow — окно, представляющее минимизированное приложение на некоторых мобильных платформах.

Определить тип окна из программы позволяет метод windowType() .


    MSWindowsFixedSizeDialogHint — запрещает изменение размеров окна. Кнопка Развернуть в заголовке окна становится неактивной;

window.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowTitleHint)

Получить все установленные флаги из программы позволяет метод windowFlags() .

На следующем шаге мы рассмотрим изменение и получение размеров окна .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *