본문 바로가기
파이썬

파이썬 Tkinter에서 화면 중앙에 창을 배치하는 방법은 무엇입니까?

by º기록 2020. 11. 13.
반응형

tkinter 창을 중앙에 배치하려고합니다. 프로그래밍 방식으로 창 크기와 화면 크기를 가져 와서 형상을 설정하는 데 사용할 수 있다는 것을 알고 있지만, 창을 화면 중앙에 배치하는 더 간단한 방법이 있는지 궁금합니다.

 

해결 방법

 

Tk 인스턴스 (창)의 너비와 높이 (픽셀 단위)를 각각 반환하는 winfo_screenwidth winfo_screenheight 메서드를 사용해 볼 수 있습니다. , 몇 가지 기본 수학을 사용하여 창을 중앙에 배치 할 수 있습니다.

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 는 가로 또는 세로로 확장 된 모니터가 2 개 이상 있는지 확인하지 않습니다. 따라서 모든 화면의 전체 해상도를 함께 얻을 수 있고 창은 화면 중간 어딘가에 끝납니다.

반면에 PyQt 는 다중 모니터 환경도 볼 수 없지만 왼쪽 상단 모니터의 해상도 만 얻을 수 있습니다 (모니터 4 개, 위쪽 2 개, 아래쪽 2 개가 사각형을 만든다고 상상해보세요). . 따라서 화면 중앙에 창을 배치하여 작업을 수행합니다. PyQt Tkinter 를 모두 사용하지 않으려면 처음부터 PyQt를 사용하는 것이 좋습니다.

 

참조 페이지 https://stackoverflow.com/questions/3352918

 

 

반응형

댓글