4.15.2 2020๋
1์ 15์ผ ์ถ์
์ด๊ฒ์ ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. PySimpleGUI.py ํ์ผ์ ์์น๋ฅผ โโ์๋ ๊ฒ๋งํผ์ด๋ ์ค์ํฉ๋๋ค. ์ด๊ฒ์ ํ์ผ ์๋จ์ ์ถ๊ฐํ๊ณ ์คํํ๋ฉด ์ป์ ์ ์์ต๋๋ค.
import PySimpleGUI as sg
print(sg)
print(sg.version)
____2๋
__ Python ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ
_________ ์ ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ
____yes_____ ์ด์ ์ ๋ค๋ฅธ Python GUI ํ๋ ์์ํฌ(tkinter, Qt ๋ฑ)๋ฅผ ์ฌ์ฉํ ์ ์ด ์์ต๋๊น(์/์๋์๋ ๊ด์ฐฎ์)?
๋ด ์ด๋ฏธ์ง๋ฅผ PNG ํ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Save_Window_As_Image.py ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ด๊ฒ์ ์ ์๋ํฉ๋๋ค.
๋ ํฐ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ํ๋ฉด ํด์๋๋ฅผ 1360x768์์ 1920x1080์ผ๋ก ๋์ธ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ฏธ์ง์ ์ผ๋ถ๋ง ์ ์ฅ๋์์ต๋๋ค. ๋ฐ๋ชจ ํ๋ก๊ทธ๋จ์์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์๋ ํ๋ฉด ํด์๋ 1360x768:
์๋ณธ๋ณด๋ค ํด์๋๋ฅผ ๋ฎ์ถ๋ฉด ํจ๊ณผ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์ง๋ฌธ์: ์คํฌ๋ฆฝํธ๊ฐ ๋ค์ ์๋ํ๋๋ก ํ๋ ค๋ฉด ํ์ด์ฌ์ ์ด๋ค ๋ถ๋ถ์ ๋ค์ ์ค์นํด์ผ ํฉ๋๊น?
๊ทธ๋ ์ง ์์ผ๋ฉด PySimpleGUI์ ๋งค์ฐ ๋ง์กฑํฉ๋๋ค. ์ด์ ๊ธฐ๋ฐํ ๋ด ์คํฌ๋ฆฝํธ์ ๋ํ ์ค๋ช ์ https://meteorspectroscopy.org/2020/03/27/meteor-spectra-analysis-new-version/ ์ ์ฐธ์กฐ
Demo_Save_Window_As_Image.py ์ ์ฐธ์กฐ
๋ฐ๋ชจ ํ๋ก๊ทธ๋จ์ 2๊ฐ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํน์ PySimpleGUI ๊ธฐ๋ฅ ๋๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋์์ธ ํจํด/์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ค์ด ํ๋ ๋ ๋ค๋ฅธ ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ํจํค์ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋๋ค. ์์ ํ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋๋ผ ์์๋ ๋๋ก ๋ฐ๋ชจ์ ๋๋ค. ์ ๋ PIL ์ ๋ฌธ๊ฐ๊ฐ ์๋๋ฏ๋ก PIL ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ๊ฐ์ฅ ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์กฐ์ธํด ๋๋ฆด ์ ์์ต๋๋ค.
์ ์ฑ ์คํํธ๋ผ ๋ถ์ ํ๋ก๊ทธ๋จ์ ๋งค์ฐ ์ธ์์ ์ ๋๋ค!
๋๋ก๋ ๋์คํ๋ ์ด ํด์๋์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. PySimpleGUI๊ฐ ์๋๋ผ tkinter์ ์ํด ๋ฐ์ํฉ๋๋ค.
tkinter์ TkWinDisplayChanged ํจ์๋ Windows API ํธ์ถ GetDeviceCaps๋ฅผ ์ฌ์ฉํ์ฌ HORZRES ๋ฐ VERTRES ๋งค๊ฐ๋ณ์๋ก ํ๋ฉด ๋๋น์ ๋์ด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
GetDeviceCaps ์๋ ์ฐธ๊ณ ์ฌํญ์ด ์์ต๋๋ค.
GetDeviceCaps๋ ๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ๊ฐ ์ ๊ณตํ๋ ์ ๋ณด๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. ๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ๊ฐ ์ ๋ณด ๋ณด๊ณ ๋ฅผ ๊ฑฐ๋ถํ๋ฉด GetDeviceCaps๋ ๊ณ ์ ๊ณ์ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ณด๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ๊ฐ ์๋ชป๋ ์ ๋ณด๋ฅผ ๋ณด๊ณ ํ๋ฉด GetDeviceCaps๋ ์๋ชป๋ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค. ๋ํ ๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ๊ฐ ์ ๋ณด ๋ณด๊ณ ๋ฅผ ๊ฑฐ๋ถํ๋ ๊ฒฝ์ฐ GetDeviceCaps๋ ๊ณ ์ DPI(96 DPI) ๋๋ ๊ณ ์ ํฌ๊ธฐ(๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ๊ฐ ์ ๊ณตํ ์ ๋ณด์ ์ ๊ณตํ์ง ์์ ์ ๋ณด์ ๋ฐ๋ผ ๋ค๋ฆ)๋ฅผ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ์ ๋ณด๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค. ๋ถํํ๋ WDDM(Windows ๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ ๋ชจ๋ธ)์ ๊ตฌํ๋ ๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ(Windows Vista์ ๋์ ๋จ)๋ GDI๊ฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค์ง ๋ชปํ๊ฒ ํ๋ฏ๋ก GetDeviceCaps๋ ํญ์ ์ ๋ณด๋ฅผ ๊ณ์ฐํด์ผ ํฉ๋๋ค.
๊ทธ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ขฐํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก ๋๋ถ๋ถ์ ๊ฒฝ์ฐ tkinter๊ฐ ์ฌ์ฉ๋๊ธฐ ์ ์ ์ด๊ฒ์ ์คํฌ๋ฆฝํธ์ ์ถ๊ฐํ๊ณ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ ์๋ํฉ๋๋ค. python ๋๋ tkinter๊ฐ ์คํ ์ค์ผ ๋ ํด์๋๋ฅผ ์ ํํ์ง ์๊ธฐ ์ํด ์ผ๋ถ ๊ฐ์ด ์ ์ฅ๋๊ณ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
import ctypes
ctypes.windll.user32.SetProcessDPIAware() # Set unit of GUI to pixels
์๋ง๋ ๋น์ ์ ๊ทธ๊ฒ์ ์๋ ํ ์ ์์ต๋๋ค.
@์ ์ด์จ
๋น์ ์ ์กฐ์ธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ด ์ฝ๋์ ๋ ์ค์ ์ถ๊ฐํ์ผ๋ฉฐ ๋ชจ๋ ํด์๋์์ ์๋ํฉ๋๋ค.
์ด๊ฒ์ด ์ ๊ฐ PySimpleGUI์ ๋ํด ์ข์ํ๋ ๊ฒ์ ๋๋ค. ์ ๋ ํญ์ ์ ๋ฌธ์ ์ ๋ํ ์๋ฃจ์ ์ ์ป์ต๋๋ค. ๋ํ ๋งค์ฐ ๋น ๋ฅธ ์๋ต. ์์ฒญ๋!
๋จ์ ์ด๋ฆ
์ด๊ฒ ๋ค @jason990420 !!! ์์ฐ ๊ฐ์ฌํฉ๋๋ค!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@์ ์ด์จ
๋น์ ์ ์กฐ์ธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ด ์ฝ๋์ ๋ ์ค์ ์ถ๊ฐํ์ผ๋ฉฐ ๋ชจ๋ ํด์๋์์ ์๋ํฉ๋๋ค.
์ด๊ฒ์ด ์ ๊ฐ PySimpleGUI์ ๋ํด ์ข์ํ๋ ๊ฒ์ ๋๋ค. ์ ๋ ํญ์ ์ ๋ฌธ์ ์ ๋ํ ์๋ฃจ์ ์ ์ป์ต๋๋ค. ๋ํ ๋งค์ฐ ๋น ๋ฅธ ์๋ต. ์์ฒญ๋!
๋จ์ ์ด๋ฆ