Как центрировать окно на экране в Tkinter?

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

47
задан nbro 4 May 2015 в 02:07
поделиться

1 ответ

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

65
ответ дан 26 November 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: