Я пытаюсь центрировать tkinter окно. Я знаю, что могу программно получить размер окна и размер экрана и использования, что для установки геометрии, но я задаюсь вопросом, существует ли более простой способ центрировать окно на экране.
Вы можете попробовать использовать методы winfo_screenwidth
и winfo_screenheight
, которые возвращают соответственно ширину и высоту (в пикселях) вашего экземпляра Tk
. (окно), и с помощью некоторой базовой математики вы можете центрировать свое окно:
import tkinter as tk
from PyQt4 import QtGui # or PySide
def center(toplevel):
toplevel.update_idletasks()
# Tkinter way to find the screen resolution
# screen_width = toplevel.winfo_screenwidth()
# screen_height = toplevel.winfo_screenheight()
# PyQt way to find the screen resolution
app = QtGui.QApplication([])
screen_width = app.desktop().screenGeometry().width()
screen_height = app.desktop().screenGeometry().height()
size = tuple(int(_) for _ in toplevel.geometry().split('+')[0].split('x'))
x = screen_width/2 - size[0]/2
y = screen_height/2 - size[1]/2
toplevel.geometry("+%d+%d" % (x, y))
toplevel.title("Centered!")
if __name__ == '__main__':
root = tk.Tk()
root.title("Not centered")
win = tk.Toplevel(root)
center(win)
root.mainloop()
Я вызываю метод update_idletasks
перед получением ширины и высоты окна, чтобы гарантировать точность возвращаемых значений.
Tkinter не видит, есть ли два или более монитора, развернутых по горизонтали или по вертикали. Итак, вы получите общее разрешение всех экранов вместе, и ваше окно окажется где-то посередине экранов.
PyQt , с другой стороны, также не видит среды с несколькими мониторами, но он получит только разрешение верхнего левого монитора (представьте, что 4 монитора, 2 вверху и 2 вниз образуют квадрат). Итак, он выполняет свою работу, помещая окно в центр экрана. Если вы не хотите использовать оба, PyQt и Tkinter , возможно, лучше с самого начала использовать PyQt.