Tkinter: Как центрировать заголовок окна

Я создаю проект, используя tkinter, и когда я создаю окно, я не могу получить заголовок окна по центру (как большинство программ в настоящее время). Вот пример кода:

from tkinter import *

root = Tk()
root.title("Window Title".center(110))# Doesn't seem to work

root.mainloop()

Есть ли способ центрировать заголовок окна вверх? заранее спасибо

5 ответов

Решение

Вы ничего не можете сделать. Tkinter не контролирует, как оконный менеджер или ОС отображает названия окон, кроме как для указания текста.

Еще один пример того, что предложил Биллал, - это пример, который корректируется в зависимости от размера окна. Я все еще не рекомендовал бы это, потому что это просто хак для визуальной эстетики, но если вы действительно хотите иметь это.

import tkinter as tk

def center(e):
    w = int(root.winfo_width() / 3.5) # get root width and scale it ( in pixels )
    s = 'Hello Word'.rjust(w//2)
    root.title(s)

root = tk.Tk()
root.bind("<Configure>", center) # called when window resized
root.mainloop()

Я придумал трюк, который делает эту работу, и он заключается в том, чтобы просто добавить столько пробелов перед заголовком:

import tkinter as tk

root = tk.Tk()
root.title("                                                                          Window Title")# Add the blank space
frame = tk.Frame(root, width=800, height=200, bg='yellow')
frame.grid(row=0,column=0)

root.mainloop()

Выход:

В качестве альтернативы вы можете использовать строку, состоящую из пустого пространства, и объединить ее с заголовком после умножения. Я имею в виду:

import tkinter as tk

root = tk.Tk()
blank_space =" " # One empty space
root.title(80*blank_space+"Window Title")# Easier to add the blank space 
frame = tk.Frame(root, width=800, height=200, bg='yellow')
frame.grid(row=0,column=0)

root.mainloop()

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

title='UNI-CARD'root.title(f'. {title}')

width=root.winfo_screenwidth()
spacer=(" "*(int(width)//6))
root.title(spacer+"Your title")

Это не так уж и идеально, но это сработает.

Другие вопросы по тегам