ScreenInfo 모듈 사용

GUI 앱이 실행될 때, 주모니터 중앙에 실행하려면 해상도 및 앱의 윈도우 크기를 계산하여 앱의 실행 위치를 설정한다.

 

Tkinter는 geometry() 메소드를 이용하여 위치를 설정할 수 있으며, 단일 모니터를 사용하는 환경이라 Tkinter 기본 메소드인 winfo_screenXXX()를 이용하여 실행 환경의 모니터 해상을 알 수 있지만, 2개 이상의 모니터를 사용하는 환경이라면 winfo_screenXXX() 메소드는 가로 크기는 각 모니터의 width를 모두 합한 값으로 나오기 때문에, 이 메소드는 사용할 수 없다.

 

screeninfo 모듈을 사용하면 각 모니터의 정보를 Monitor 클래스로 확인할 수 있다. screeninfo 모듈은 pip로 설치할 수 있으며, 아래 코드와 같이 간단히 특정 모니터의 화면 중앙에 앱을 위치 시킬수 있다.

$ pip install screeninfo
import tkinter
import screeninfo

app_x, app_y, app_width, app_height = 0, 0, 600, 400
for m in screeninfo.get_monitors():
    if m.x == 0 and m.y == 0:
        app_x = (m.width - app_width) // 2
        app_y = (m.height -app_height) // 2
        break
geometry = '{}x{}+{}+{}'.format(app_width, app_height, app_x, app_y)

root = tkinter.Tk()
root.title('Screen info test')
root.resizable(0, 0)
root.geometry(geometry)
root.mainloop()

get_monitors() 메소드를 사용하여 연결된 모든 모니터를 리스트로 반환하며, (x, y) 값이 (0, 0) 인 것을 주모니터라고 생각하고 위와 같이 작성하였는데, 모니터 배치에 따라 각 모니터의 (x, y) 값에 영향을 미친다. 주모니터를 찾는 방법은 더 찾아봐야 할것 같다.

위 이미지와 같이 듀얼모니터를 사용할 경우 오른쪽 화면이 주모니터이지만 (x, y) 값이 (0, 0)인 왼쪽 모니터 중앙에 출력된 것을 확인할 수 있다.