2014-09-03 3 views
2

Ive недавно начал использовать tkinter в python, и у меня возникли проблемы с центрированием окна. Я пробовал все советы на этом сайте, но всякий раз, когда я их пробовал, окно похоже на строку в середине экрана. У меня уже есть виджеты, и он отлично работает без центрирования, но я был бы очень признателен, если бы кто-то помог мне решить мою проблему. Это то, что я пытался до сих пор.Центрирование окна python tkinter

root = Tk() 
root.title("Password") 
root.resizable(FALSE,FALSE) 

mainframe = ttk.Frame(root, padding="3 3 12 12") 
mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainframe.columnconfigure(0, weight=1) 
mainframe.rowconfigure(0, weight=1) 

w = mainframe.winfo_width() 
h = mainframe.winfo_height() 
ws = root.winfo_screenwidth() 
hs = root.winfo_screenheight() 
x = (ws/2) - (w/2) 
y = (hs/2) - (h/2) 
root.geometry('%dx%d+%d+%d' % (w, h, x, y)) 

ответ

1

Ok я нашел и исправил проблему. Вывод из решения OregonTrail, я обнаружил, что если окно имеет нужный размер, и вы просто хотите изменить местоположение, то вы можете легко вместо того, чтобы устанавливать размер корня, вы можете просто переместить окно в центр.

w = root.winfo_reqwidth() 
h = root.winfo_reqheight() 
ws = root.winfo_screenwidth() 
hs = root.winfo_screenheight() 
x = (ws/2) - (w/2) 
y = (hs/2) - (h/2) 
root.geometry('+%d+%d' % (x, y)) ## this part allows you to only change the location 

Я думаю, что этот ответ не совсем в центре, вероятно, охлаждает немного, так как ч возвращалось 200, когда оно должно быть меньше, но это выглядит в центре и работает отлично.

0

Вы должны использовать winfo_reqwidth() и winfo_reqheight(), потому что окно не имеет ширину или высоту в то время, что вы называете winfo_height() и winfo_width().

Пример программы:

from tkinter import Tk 
from tkinter import ttk 

root = Tk() 

style = ttk.Style() 
style.configure("BW.TLabel", foreground="black", background="white") 

l1 = ttk.Label(text="This is the best label in the world", style="BW.TLabel") 
l1.pack() 

w = l1.winfo_reqwidth() 
h = l1.winfo_reqheight() 
ws = root.winfo_screenwidth() 
hs = root.winfo_screenheight() 
x = (ws/2) - (w/2) 
y = (hs/2) - (h/2) 
print(w, h, x, y) 
root.geometry('%dx%d+%d+%d' % (w, h, x, y)) 

root.mainloop() 
+0

Но для этого мне нужно использовать виджет для настройки req_height() и req_width(), но в моем коде используется много виджетов (исходное сообщение включало только те части, которые я считал значительными). – 007

+0

И если я использую корень, высота слишком велика. – 007

Смежные вопросы