tkinter์ ๋ฒ๊ทธ / ๋ฌธ์
no_titlebar๊ฐ ์๋ํฉ๋๊น?
ํดํ์ด ์๋ํฉ๋๊น?
๋งฅ
3.6 ์ด์
์ด๊ฒ์ด ์ดํดํ๋ ๊ฒ์ด ์ค์ ํด์ง๋ ๊ณณ์ ๋๋ค.
8.610์ ์คํํ๋ ์ฌ๋๊ณผ 8.6.10์ ์คํํ์ง ์๋ ์ฌ๋์ผ๋ก๋ถํฐ ์๊ณ ์ถ์ต๋๋ค.
์ด๊ฒ์ด 8.6.10์๋ง ํด๋น๋๋์ง ์ดํดํ๋ ค๊ณ ํฉ๋๋ค.
์ฝ๋์ ๋ค์ ์ค์ ์ถ๊ฐํ์ฌ ์์ธํ tkinter ๋ฒ์ ์ ์ป์ ์ ์์ต๋๋ค.
print(sg.tkinter.Tcl().eval('info patchlevel'))
Mac์์ no_titlebar ๋ฌธ์ ๋ฅผ ๊ธฐ์ตํ๋ฉฐ ๋ฌธ์ ๊ฐ์์ ๊ฒฝ์ฐ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณต๋์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์ถ์ต๋๋ค. ๋ช ๋ช ์ Mac ์ฌ์ฉ์์ ํ์คํ ๋์์ด ์ ๋ง ํ์ํฉ๋๋ค.
๋ค์์ ์ํ ํ ์์๋ ์ฌ๋์ด ํ์ํฉ๋๋ค.
๋ฌธ์ ๋ฅผ ๋ถ๋ฆฌํ๊ณ ๋ณด์ฌ์ฃผ๋ ์งง์ ํ๋ก๊ทธ๋จ (์ฆ, 400 ์ค ํ๋ก๊ทธ๋จ์ ๋ํ ๋งํฌ๋ฅผ ๋ถ์ฌ ๋ฃ์ง ๋ง์ญ์์ค .... ๋์ 10 ์ค ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ๋ถ์ฌ ๋ฃ์ผ์ญ์์ค).
์, ๋ฌธ์ ์ ๋ฒ์๋ฅผ ์ขํ๋ ๊ฒ์ ๊ณ ํต ์ค๋ฝ์ง๋ง ๋๋ฒ๊น ํ๋ก์ธ์ค์ ์ผ๋ถ์ ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ ๋๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฆ์ ์์ํ ์ ์๋๋ก ์คํํ ์์๋ ํญ๋ชฉ์ ์ ๊ณตํ์ฌ ๋์์์ฃผ์ธ์.
์ด ๋ฏธ๋ฆฌ ์์์ด ์ง์ ๋ ์ฝ๋ ๋ธ๋ก์ ๋ชจ๋ ์ฝ๋์ ๋ถ์ฌ ๋ฃ์ ์ ์๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
print(sg.tkinter.Tcl().eval('info patchlevel'))
๋ค์์ ์คํํ์ฌ ๋ฌธ์ ๊ฐ ์๋์ง ํ ์คํธ ํ ์ ์์ต๋๋ค.
import PySimpleGUI as sg
sg.popup_no_titlebar('This should not have a titlebar')
๊ณผ๊ฑฐ์ ์ด๊ฒ์ ๋๋ฒ๊น ํ๋ ๋ฌธ์ ์ ์ผ๋ถ๋ ๋๋ฒ๊น ์ ๋์์ด๋๋ ์ ์ ํ ํ ์ด๋ธ์ด ๋ง๋ค์ด์ง์ง ์์๋ค๋ ๊ฒ์ ๋๋ค. ์ธ ๊ฐ์ง ๋ณ์๊ฐ ์์ต๋๋ค.
๋๋ถ๋ถ์ ์๊ฐ ๋์ ์ด์ ์ด ๋ ๊ฒ์ tkinter ๋ฒ์ ์ด์์ต๋๋ค. tkinter๊ฐ ๋ชจ๋ ๋ฌธ์ ์ ๋ํ ์ฑ ์์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
๋ด ๋ถ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
PySimpleGUI v4.30.0
tkinter v8.6
MacOS 10.15.7
๋ํ ํ์ด์ฌ ๋ฐ์ด๋๋ฆฌ์ Homebrew๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์ธ๊ธํ๊ณ ์ถ์ต๋๋ค.
ํธ์งํ๋ค:
Python v3.8.1
macOS High Sierra ๋ฒ์ 10.13.6
PySimpleGUI ๋ฒ์ 4.30.0.12
tcl ๋ฒ์ = 8.6 tkinter ๋ฒ์ = 8.6
tcl ์์ธ ๋ฒ์ = 8.6.10
Python ๋ฒ์ 3.8.6
๊ทธ๋ฆฌ๊ณ ... ์๋ํฉ๋๋ค!
ํธ์ง : tkinter์ ๊ด๋ จํ์ฌ ๋์๊ฒ ๊ฐ์ฅ ์ ์ ๋ํต์ ์ค ํ๊ฒฝ :
Homebrew-> brew ์ค์น tcl-tk
Homebrew-> brew install pyenv-> Python (์๋ ์ฐธ์กฐ)
env \
PATH="$(brew --prefix tcl-tk)/bin:$PATH" \
LDFLAGS="-L$(brew --prefix tcl-tk)/lib" \
CPPFLAGS="-I$(brew --prefix tcl-tk)/include" \
PKG_CONFIG_PATH="$(brew --prefix tcl-tk)/lib/pkgconfig" \
CFLAGS="-I$(brew --prefix tcl-tk)/include" \
PYTHON_CONFIGURE_OPTS="--enable-framework --with-tcltk-includes='-I$(brew --prefix tcl-tk)/include' --with-tcltk-libs='-L$(brew --prefix tcl-tk)/lib -ltcl8.6 -ltk8.6'" \
pyenv install 3.8.6
pyenv global 3.8.6
์ด๊ฒ์ ๋ด ๊ธฐ๋ณธ ํ์ด์ฌ์ผ๋ก ๋ง๋ค๋ ค๋ฉด :
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
@norambna์ ๋์ด๋ ๋ชจ๋ ๋จ๊ณ๋ฅผ
Python v3.8.6
PySimpleGUI v4.30.0
tkinter v8.6
MacOS 10.15.7
pyenv v1.2.21
tcl-tk v8.6.10
๋์์ด๋์ด ๊ธฐ์ฉ๋๋ค! ๋ชจ๋ macOS / tkinter ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋ชจ๋ tkinter ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ ์์ง๋ง ๋ถ๋ช ํ macOS์์ ์์ ํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
tkinter ๋ฒ์ 8.6.10์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๊น?
8.6.10์ ์ ์ธํ ๋ชจ๋ ๋ฒ์ ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ํด๋น ๋ฒ์ ์ ํ์ธํ๊ณ 8.6.10์ด ์๋ ๋ฆด๋ฆฌ์ค์๋ง "์์ "์ ์ ์ฉ ํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์ ๋ง๋ก ํผ๋์ค๋ฌ์ํ๋ ๊ฒ์ ์ด๊ฒ์ด ์ต๊ทผ์ ๋ฌธ์ ์ด๊ฑฐ๋ Mac์์ ์ ๋ชฉ ํ์ ์ค์ด ์๋ํ์ง ์์ ๊ฒฝ์ฐ์ ๋๋ค. ๊ฒฐ์ฝ ํจ๊ณผ๊ฐ ์์์ ๊ฒ์ด ์ด์ํด ๋ณด์ด์ง๋ง ํ์คํ ๋งํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
๋ด๊ฐ ๋ณธ "์์ "์ ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ ๊ฒ๋ค์ ๋ง์น ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ง์ค์์ต๋๋ค.
์ด ๋จ๊ณ๋ ๋งค์ฐ ์ถ์ ํ๋ฏ๋ก ์ด๊ฒ์ ๋ํด ๋ญ๊ฐ๋ฅผํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ฉ์๋ ์ด๋ ๊ฒ ๋ง์ ๋ฌธ์ ๋ฅผ ๊ฒช์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์ต๋๋ค. tkinter ๋ฒ์ ๋ฒํธ๋ฅผ ํ์ธํ๊ณ ๋ฒ์ ์ด 8.6.10์ด ์๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉํ๋ ์์ ์ฌํญ์ด ํฌํจ ๋ GitHub ์ฉ ๋ฆด๋ฆฌ์ค๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค.
tkinter ๋ฒ์ 8.6.10์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๊น?
์ ์๊ฒ๋ ๊ทธ๋ ์ต๋๋ค. 8.6.10์ ์๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๋ฒ์ ์ด 8.6.10 ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ ํจ์น๊ฐ ํฌํจ ๋ 4.30.0.13์ ๋ฐฉ๊ธ ๊ฒ์ํ์ต๋๋ค.
์ด๊ฒ์ด ๋ฌธ์ ๋ฅผ "์์ "ํ๋ค๋ฉด, ํจ์น๋ฅผ ํ๋ ๋ ์๋ํ๊ณ ์ถ์ต๋๋ค. ์ด ์ ํจ์น๋ ์ฒ์ ์ค์ ํ ํ wm_overrideredirect ํ๋๊ทธ๋ฅผ ์ง ์๋๋ค.
root.wm_overrideredirect(True)
root.wm_overrideredirect(False)
๋ค์์ ์๋ํ๊ณ ์ถ์ ๊ฒ์ ์์ ์ด True False True๊ฐ๋๋๋ก ๋ค์ True๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ์์ด๋์ด๋ ์ผ๋ถ ์์คํ ์ ๊ฒฝ์ฐ ๊ฐ์ด True๋ก ์ค์ ๋๋ฉด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ด๊ฐํ๊ณ ์ถ์ง ์์ ๊ฒ์ ํ์ฌ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๋ชจ๋ ์ค์น๋ฅผ ์ค๋จํ๊ณ ๋ค์ True๋ก ์ค์ ํ๋ฉด Mac์ ๋ชจ๋ tkinter ๋ฒ์ ์์ ์ฌ๋ฐ๋ฅธ ์์ ์ ์ํํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๊ณต ํ ์ ์์ต๋๋ค.
ํจ์น๊ฐ ์ ์ฉ๋๋ฉด ์ฝ์์ ๋ค์ ๋ฉ์์ง๊ฐ ์ธ์๋ฉ๋๋ค.
* Applying Mac no_titlebar patch *
์ด๋ฅผ ํ
์คํธํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ํ์
์ ํธ์ถํ๊ณ ํ
์คํธํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋๋๋ ํ
์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ํ
์คํธ ๋๊ตฌ์ ํญ ์ค ํ๋ (PySimpleGUI.py ํ์ผ์ ์คํํ๊ฑฐ๋ sg.main()
ํธ์ถํ์ฌ ํธ์ถ ๋จ)๋ ํ์
์ ํ
์คํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ด๋ ๊ฒํ๋ฉด ์ ๋ชฉ ํ์ ์ค์ด์๋ ํ์ ์ ํธ์ถํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์ ๋ชฉ ํ์ ์ค์ด์๋ ์ฐฝ์ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
๋ฐฐ๊ฒฝ์ด ํ
์คํธ ์ฐฝ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ ์ฐพ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. No Titlebar
๋ฒํผ์ ํด๋ฆญํ๋ฉด์ด ์์ ์ฐฝ์ด ๋ํ๋ฉ๋๋ค.
์ด๋ก ์ธํด 8.6.10์ด ์๋ ๋ฒ์ ์ด ์์ ๋๊ณ 8.6.10 ์ด์์์ ์คํ๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ค์ ์ค์ ์ด ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค๋ฅธ ํ ์คํธ๋ฅผ ์ ์ํ๊ฒ ๊ตฌ์ฑํ๊ฒ ์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ์ฐ์ ์์๊ฐ ๋์ ๋ฆด๋ฆฌ์ค๋ก PyPI์ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ฒ์ ํ ๊ฒ์ ๋๋ค.
์ ๋ชฉ ํ์ ์ค์ด์๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด GitHub์ ํจ์น๊ฐ ๊ฒ์๋์์ต๋๋ค. ๋ค์ ์ฌํญ์ ์ดํดํด์ผํฉ๋๋ค.
๋๊ตฐ๊ฐ GitHub ๋ฒ์ ์ ๋ค์ด๋ก๋ํ์ฌ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๊น?
๋๊ณ ์ถ์ต๋๋ค. tkinter ๋ฒ์ ๊น์ง ๋ชจ๋ ๊ฒ์ด ์ค์ ๋์์ง๋ง PySimpleGUI์ 4.30.0.13 ๋ฒ์ ์ ๊ฐ์ ธ ์ค๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํด๋น ๋ฒ์ ์ ์ ํํ ์ด๋ป๊ฒ ๋ค์ด๋ก๋ํ๊ณ ์ฌ์ฉํฉ๋๊น?
๋๋ถ๋ถ์ ์ ๋ฐ์ดํธ ๋ฒ์ ์์ ๋์ผํ ํจ์น๊ฐ ์์ด์ผํฉ๋๋ค.
์ด ํจ์น์ ๋ํด ์ด๋ป๊ฒํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ ์ง๊ธ PyPI์ ๋ํ ๋ฆด๋ฆฌ์ค๋ฅผ ๋ชจ์ผ๊ณ ์์ผ๋ฉฐ Mac์์ ์ ๋๋ก ํ ์คํธ๋์ง ์์ผ๋ฉด ๋ฆด๋ฆฌ์ค์์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ผ ํ ๊ฒ์ ๋๋ค. ๋๋ ์ ์ฌ์ ์ผ๋ก ์์ ํ ์๋ก์ด ๋ฌธ์ ์ธํธ๋ณด๋ค ์๋ ค์ง ๋ฌธ์ ๋ฅผ ๊ณต๊ฐํ๋ ํธ์ด ๋ซ์ต๋๋ค. ๋ฌผ๋ก ์ ๊ฐ ์ ํธํ๋ ๊ฒ์์ด ๋ฌธ์ ๋ฅผ ์ ํด๊ฒฐํ๊ณ PyPI์ ๊ฒ์ํ๋ ๊ฒ์ ๋๋ค.
๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ์คํํ ์์๋ Mac ์ฌ์ฉ์๊ฐ ์๋ค๋ฉด ์ ์ ๋๋ฃ Mac ์ฌ์ฉ์ ์ค ์ผ๋ถ๊ฐ ๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
Mac ์ฌ์ฉ์๊ฐ ์ ์ฝ๋๋ฅผ ํ ์คํธ ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ฐ๊ธฐํ๊ณ ์ถ์ง ์์ต๋๋ค. ๊ทธ๋์ ํจ์น๊ฐ ์คํ๋๋์๊ธฐ๋ฅผ ์ ์ดํ๊ธฐ ์ํด ๋ ๋ง์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด "์์ "์ ๊ทธ๋ฅ ๋ฒ๋ฆฌ๊ณ ์ ์ฌ์ ์ผ๋ก ๊ธฐ์กด Mac ์ฌ์ฉ์๋ฅผ ๋ง์น ์๋ ์์ต๋๋ค. ๊ธ์, ๊ธฐ์ ์ ์ผ๋ก๋ ํ ์ ์์ง๋ง ์ค๋๋ ์์ ์ฝ๋๋ฅผ ๊ฐ์ง ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
Mac์์ ์ ๋ชฉ ํ์ ์ค์ด์๋ ์ฐฝ์ ๋ํ ํจ์น๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋งค๊ฐ ๋ณ์ enable_mac_notitlebar_patch
๋ฅผ True๋ก ์ค์ ํ์ฌ set_options
๋ฅผ ํธ์ถํฉ๋๋ค.
sg.set_options(enable_mac_notitlebar_patch=True)
์ด ํจ์น๋ ์ ๋ชฉ ํ์ ์ค์ด์๋ ์ฐฝ์ด ์์ฑ ๋ ๋ ์ถ๊ฐ ํธ์ถ์ ๋ฐ์์ํต๋๋ค.
root.wm_overrideredirect(False)
ํจ์น๋ tkinter ๋ฒ์ <8.6.10์ ์คํํ๋ Mac์์๋ง ์คํ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํจ์น๋ ๋นํ์ฑํ๋์ด ์์ต๋๋ค. set_options
๋ฅผ ํธ์ถํ์ฌ ํจ์น๋ฅผ ์ป์ผ๋ ค๋ฉด ๊ธ์ ์ ์ธ ์กฐ์น๋ฅผ ์ทจํด์ผํฉ๋๋ค.
์ด ์ฝ๋๋ ๋ฒ์ 4.30.0.26์ด๋ฉฐ ํ์ฌ GitHub์ ์์ต๋๋ค. ๊ณง 4.31.0 ๋ฒ์ ์ผ๋ก ์ถ์ ๋ ์์ ์ ๋๋ค.
์ด์ ์ ๋งํ๋ฏ์ด ์ด์ ํจ์น์์ ํ ์คํธ๋ฅผ ์ํ ํ ์ํฅ์ด ์์ต๋๋ค. ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ OS๋ฅผ ์คํํ๋ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ Mac ์ฅ์น๊ฐ ์์ต๋๋ค. ๋ํ ๋ค์ํ ๋ฒ์ ์ python๊ณผ tcl / tk๋ฅผ ์คํํ๊ณ ์์ต๋๋ค.
๋ฉ์ฒญํ ์ง๋ฌธ ์ธ ๊ฒฝ์ฐ ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฒ์ (4.30.0.13 ๋๋ 4.30.026)์ ์ด๋ป๊ฒ ์ค์นํฉ๋๊น? ๋๋ ์ผ๋ฐ์ ์ผ๋ก pip ์ค์น๋ฅผ ์ฌ์ฉํ์ง๋ง ๋ค๋ฅธ ์์ ์ ์ํํ๋ค๋ฉด ๋์์ด ๋ ์ฝ๊ฐ์ ์ง์นจ์ด ํ์ํฉ๋๋ค.
4.31.0์ ์ค๋ ์ด PyPI์ ๊ฒ์๋์์ต๋๋ค. ๋ค๋ฅธ ๋ฒ์ ์ด์๋ ๊ฒ์ฒ๋ผ pip ์ค์นํ ์ ์์ต๋๋ค.
์ด์ ๊ฒ์๋ฌผ์ ์ฝ๋ ์ค์ ์ถ๊ฐํ๋ฉด ํจ์น๊ฐ ํ์ฑํ ๋ ์ํ๋ก ์คํ๋ฉ๋๋ค.
sg.set_options(enable_mac_notitlebar_patch=True)
"Upgade"๋ผ๊ณ ํ์๋ ๋นจ๊ฐ์ ๋ฒํผ์ ํด๋ฆญํ์ฌ sg.main () ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ GitHub ๋ฒ์ ์ ์ค์นํ ์ ์์ต๋๋ค. 4.31.0์ GitHub์ ํ์ฌ ๋ฒ์ ์ด๋ฉฐ PyPI์ ์ถ์ ๋ ๋ฒ์ ์ ๋๋ค.
๋ค๋ฅธ ๋ฒ์ ์ tcl / tk (8.5.9, 8.6.8, 8.6.10)์์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ํ
์คํธ๋ฅผ ์ํ ํ ๊ฒฐ๊ณผ ์๋ณธ ์ฝ๋๊ฐ
์ ๋ชฉ ํ์ ์ค์ด ๋นํ์ฑํ ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ต์ํ ๋๋ x ๋ฒํผ์ ํด๋ฆญ ํ ์ ์์ต๋๋ค. ์ต์ํ ํ ๋ค์ ๋ค์ ๊ฐ์ ธ ์ค๋ฉด ์ ๋ชฉ ํ์ ์ค์ด ์์ ํ ๋นํ์ฑํ๋ฉ๋๋ค. ์ด๊ฒ์ 8.5.9 ๋ฐ 8.6.8 ๋ชจ๋์์ ๋ฐ์ํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด 8.6.10์์ ์ ์๋ํฉ๋๋ค. (์ด์ ์๊ฒฌ์์ ์ธ๊ธํ๋ฏ์ด)
๋ค์์ผ๋ก ํจ์น๋ก ์คํ ํด ๋ณด์์ต๋๋ค.
๊ฒฐ๊ตญ ์ ๋ชฉ ํ์ ์ค์ด ํ์ฑํ๋๊ณ ์ต์ํ ๋ฐ x ๋ฒํผ์ด ๋ชจ๋ ์๋ํ์ผ๋ฉฐ, ์ต์ํํ๊ณ ์ฐฝ์ ๋ค์ ๊ฐ์ ธ ์ค๋ฉด ์์์ ์ธ๊ธ ํ ๊ฒ๊ณผ ์ ์ฌํ๊ฒ ๋นํ์ฑํ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋ฌธ์ ๋ ๋ฒ์ 8.6.8 ์ดํ์์ ์ฌ์ ํ ๋ฐ์ํฉ๋๋ค.
์ ๋ชฉ ํ์ ์ค์ด์๋ ๋๋๊ทธ ๊ฐ๋ฅํ ์ฐฝ์ ์ป๊ธฐ ์ํด tkinter๋ฅผ ์ฌ์ฉํ๋ ์๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ๋ชฉ ํ์ ์ค์ ์จ๊ธฐ๋ ค๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฃผ๋ณ์ ๊ฒ์ ํ ๋์ด ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด๊ฒ์ tcl / tk 8.6.8 ์ดํ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
https://stackoverflow.com/questions/29641616/drag-window-when-using-overrideredirect
๋ฒ์
MacOS : 10.15.7
PySimpleGUI : 4.31.0 ์ต์
Python : 3.8.1, 3.8.6, 3.9.0
tcl / tk 8.6.8 ์ดํ
ํจ์น ๋๋ ์๋ณธ ์์ ๊ฐ ์๋ํ์ง ์์
ํจ์น๊ฐ ์ ์ฉ๋๊ณ ์๋ค๋ ๋ฉ์์ง๊ฐ ์ฝ์์ ํ์ ๋์์ต๋๊น?
ํ ์คํธ์์ ์ด์ํ ์ ์ ์ ๋ชฉ ํ์ ์ค ์์์ ๋ฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ์ ์ด ์ด์ ์ ์ฌ๊ธฐ์ ๊ฒ์ ๋ ๊ธฐ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ ์๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด์ง๋ง False ๊ฐ์ ๋๋ค. ์๋ก์ด ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ ๊ธ ๋์์ด ์๋ค๋ ๊ฒ๋ ์ด์ํฉ๋๋ค.
์ด ๋ฉ์์ง๊ฐ ํ์๋๋์ง ํ์ธํ ์ ์์ต๋๊น?
'* Applying Mac no_titlebar patch *
์ด ๋ฉ์์ง๊ฐ ํ์๋์ง ์์ผ๋ฉด ํจ์น๊ฐ ์ ์ฉ๋์ง ์์ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๋ณ์ ์กฐํฉ์ผ๋ก ์์ ํ๊ณ ์๋์ง ํ์ธํ๊ธฐ ์ํด tkinter ๋ฒ์ ์ ์ธ์ํ๋ ๊ฒ ์ธ์๋ PySimpleGUI ๋ฒ์ ์ ์ธ์ํ๋ฉด ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋๋ MacOS๊ฐ ์ฌ๊ธฐ์๋ ์ญํ ์ ํ ๊ฒ์ด๋ผ๊ณ ์ ์ ๋ ์์ฌํ๊ณ ์์ต๋๋ค. ์ฌํด ์ด๊น์ง์ด ์ ๋ชฉ ํ์ ์ค์ด์๋ ๋ฌธ์ ์ ๋๊ตฌ ์ค๋ช ๋ฌธ์ ์ ๋ํด ๋ฃ์ง ๋ชปํ์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ PySimpleGUI์์ ์ฒ์์ผ๋ก ์ถ์ ๋ ๊ธฐ๋ฅ ์ค ์ผ๋ถ ์์ง๋ง ์ผ๋ง ์ ๊น์ง ๋งํด๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ํ ๋ฌธ์ ๋ณด๊ณ ๊ฐ ์์์ต๋๋ค.
์ด๊ฒ์ drag-anywhere ๋ถ๋ถ์ ์ด์ ์ ๋ ผ์๋์ง ์์์ผ๋ฉฐ ์๋ก์ด ๋ฐ์ดํฐ์ ๋๋ค. ์ ๋ชฉ์๋ ๋ฐ์ฝ๋๋ฅผ ํ ์คํธํ๊ณ ์๋ํ๋ ๋ฐ ์ง์คํ ์ ์์ต๋๊น?
์ด์ ๋ํ "์์ "์ Mac ์ฌ์ฉ์๊ฐ tkinter 8.6.10์ ์คํํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ์ ๋ ๋ถ๋ช ํ Mac ์ํํธ์จ์ด์ ๋ฒ๊ทธ ์ธ ๋ฌธ์ ์ ๋๋ฌด ๋ง์ ์๊ฐ๊ณผ ์๋์ง๋ฅผ ์๋นํ๊ณ ์์ต๋๋ค. ์ฝ๋๋ฅผ ํ ์คํธ ํ ์ ์๋ค๋ ๊ฒ์์ด ์์ ์ ์๋ฃํ๊ธฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.
๋๋ 6 ๋ ๋๊ฒ ์๋ ค์ง ๋ฌธ์ ์์ง๋ง ์์ง ์์ ๋์ง ์์ tk ๋ฒํผ ๋ฒ๊ทธ๋ก ์ ์ ํ ๋ฒ ์ฌ๊ธฐ์ ์์ต๋๋ค. ์ด์ ๋ํ ์์ ์ฌํญ์ PySimpleGUI์ ttk ๋ฒํผ์ ๋ํ ์ง์์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ๋ง์ ์์ ์ด์์ง๋ง ๊ถ๊ทน์ ์ผ๋ก Mac ์ฌ์ฉ์๊ฐ PySimpleGUI๋ฅผ ์ฌ์ฉํ ์์๊ฒ๋์์ต๋๋ค. ์ด ๋ฒ๊ทธ์ ๋ฌ๋ฆฌ์ด ๋ฒ๊ทธ๋ tkinter / Mac ๊ฐ๋ฐ์์ ๊ด์ฌ์ ๋์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ 8.6.10์์ ์์ ๋์์ต๋๋ค. ์ฆ, ์ด๋ฌํ ์ข ๋ฅ์ ํดํน ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฝ๋์ ์ถ๊ฐํ์ง ์๊ณ ๋ Mac ์ฌ์ฉ์๊ฐ ์ค์ค๋ก ์ ๊ทผ ํ ์์๋ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค.
๋๋ ๋ด Mac ์ฌ์ฉ์๋ฅผ ์ข์ํ์ง๋ง ์ฌ์ฉ์ ์๊ฐ ์ ์ ๋ ํด๋น ํ๋ซํผ์ ์ง์ํ๋ ๋ฐ ๋๋ฌด ๋ง์ ํฌ์๋ฅผํ๋ ๊ฒ์ ์ ๋นํํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๋๋ Mac์์ ์ค์น๊ฐ 10 %๋ฅผ ๋ํ ํ ์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์, ์๊ท๋ชจ ์ฌ์ฉ์ ๊ทธ๋ฃน์๊ฒ๋ ํฐ ๋ฒ๊ฑฐ ๋ก์์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ฐฉ๊ธ macOS v11 (์ด๋ฒ ์ฃผ์ ์๋ก ์ถ์๋จ)์ ๋ค์ด๋ก๋ํ๋๋ฐ ๋ค๋ฅธ ๋์์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ๊ฒ์๋ฌผ๊ณผ ๋ฌ๋ฆฌ ์ต์ํ ๋ฐ x ๋ฒํผ์ด ์์ ํ ๋นํ์ฑํ๋์์ต๋๋ค.
macOS v11์์ tkinter๋ก๋ ์์ ์ฐจ๋ฆฐ ํ ๊ฐ์ง๋ tk / tcl v8.5.9์ ๊ฒฝ์ฐ ์ ๋ชฉ ํ์ ์ค์ด์๋ ๊ฒฝ์ฐ root.overrideredirect(True)
๋ผ๊ณ ๋งํ๋ฉด๋์ง๋ง tk / tcl v8.6.8์์๋ ๋๊ฐ์ดํ๋ ค๊ณ ํ ๋ ์๋ํ์ง ์์ต๋๋ค. ๋๋ ์ฌ์ ํํด์ผํ๋ค
root.overrideredirect(True)
root.overrideredirect(False)
์๋์ํค๊ธฐ ์ํด.
์ฐธ๊ณ ๋ก, ํจ์น๊ฐ ์ ์ฉ๋๊ณ ์๋ค๋ ๋ก๊ทธ ๋ฉ์์ง๋ฅผ ๋ฐ์์ต๋๋ค. ๋ํ ๋ด๊ฐ ์ฌ์ฉํ๊ณ ์๋ PySimpleGUI ๋ฒ์ ์ 4.31.0 Released 13-Nov-2020์ด์์ต๋๋ค.
Mac ํ๋ซํผ์ ํน์ ํ ์ผ๋ถ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๊ท๋ชจ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ง์ํด๋ ๊ด์ฐฎ์ต๋๋ค. ๋ฌธ์ ๋ ๊ทธ๊ฒ์ด ์์ง์ด๋ ํ์ ์ด์๋ค๋ ๊ฒ์ ๋๋ค. ์ต๊ทผ์ ์์ ๋ ๋ฐํ์ ์ฐพ์ ์ ์์์ต๋๋ค. Mac ์ฌ์ฉ์๊ฐ Homebrew ๋์ Python.org์์ ์ค์น๋ก ์ ํ ํ ํ ์ํฉ์ด ์ข์ ๋ณด์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฒํผ๊ณผ ํ ์ด๋ธ์ ๋ฌธ์ ๊ฐ์๋ ๋ฆด๋ฆฌ์ค์์ ๋ชจ๋ ์ฌ๋๋ค์ ๋ฉ์ด์ง๊ฒํ์ต๋๋ค. ํ์ง๋ง ๋ญ๊ฐ ๋ณํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ญ๊ฐ ๋งฅ ์ค์์ค๊ฐ ์๋๊น ์๊ฐํฉ๋๋ค.
์์ ์ธ๊ธํ๋ฏ์ด ์ธ ๊ฐ์ง ๋ณ์๊ฐ ์์ต๋๋ค. tkinter ๋ฒ์ , PySimpleGUI ๋ฒ์ ๋ฐ MacOC ๋ฒ์ ์ด ์์ต๋๋ค. tkinter๊ฐ Python์ผ๋ก ํจํค์ง๋์ด ์๊ณ Python์ ๋ฆด๋ฆฌ์ค๋ง๋ค ๋ค๋ฅผ ์ ์์ง๋ง tkinter ๋ฒ์ ์ ์ถ์ ํ๋ ํ Python ๋ฒ์ ์ ์ค์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ชฉ๋ก์์ Python ๋ฒ์ ์ ๋ฒ๋ฆฌ๊ณ ์์ต๋๋ค. ๋๋ ๊ฒฐ๊ณผ์ ๋ํ ํธ๋ค์ด ์๋ค. ์กฐํฉ์ด "์๋ํ์ง ์๋๋ค"๋ ๋ณด๊ณ ์ ์ด์ธ์ 3 ๊ฐ์ง ๋ณ์์ ๋ํ ๊ฒ์ด๋ค.
8.5.9๋ก ๋ฌด์์ด๋ ํ๋ ๊ฒ์ ๋๋ฌด ๋ฉ๋ฆฌ ๋์๊ฐ๋ ๊ฒ์ ๋๋ค. PySimpleGUI๋ 6 ๋ ์ ์ผ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ Python 3.4 ์ด์์ ์ง์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋์ ์ด์์ง๋ง Raspberry Pi๊ฐ ์ข ์ข ์ด ๋ฒ์ ์ Python๊ณผ ํจ๊ป ์ ๊ณต๋๋ฏ๋ก ํฉ๋ฆฌ์ ์ ๋๋ค. Pi ์ฌ์ฉ์์๊ฒ Python ๋ฒ์ ์ ์ ๋ฐ์ดํธํ๋๋ก ๊ฐ์ํ๋ ๊ฒ ์ธ์๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์๋ ๋ฐฉ๋ฒ์ด ๊ฑฐ์ ์์ผ๋ฉฐ ์ฌ์ํ ์ผ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒํ์ง ์์ ๊ฒ์ ๋๋ค.
8.5.9๋ 10 ๋ ์ ์ ์ถ์๋์์ต๋๋ค. ์ผ๋ถ ์ปจํ ์คํธ ... ๊ฐ์ ํด 8.5.9๊ฐ ๋ฆด๋ฆฌ์ค๋์์ผ๋ฏ๋ก 2.7.0๋ ๋ฆด๋ฆฌ์ค๋์์ต๋๋ค. Python 3์ 3.1์ด์์ต๋๋ค. ์ค์ ๊ฐ์น๊ฐ ๋๊ธฐ์๋ ๋๋ฌด ๋ฉ๋ฆฌ ๋์๊ฐ๊ณ ์์ต๋๋ค. ๋๋ ๋น์ ์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๋งฅ๋ฝ์ ์ดํดํฉ๋๋ค. ๊ทธ๊ฒ์ ํ๋ ์ ๋ชฉ ํ์ ์ค์ด ์๋ํ์ง ์์ ์์ ๋ณด์ฌ์ฃผ๊ธฐ์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ๊ฒ์ ์๋ ๋ฒ์ ์ ์ฐพ๊ธฐ ์ํด 10 ๋ ์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ๋งค์ฐ ๊ทน๋จ์ ์ ๋๋ค. ์ํํธ์จ์ด์ ์ผ์์ ๋๋ค.
MacOS v11์ด tkinter์ ์๋ ๋ฐฉ์๊ณผ ๊ด๋ จ์ด ์๋ค๋ ์์์ ๋ฃ๋ ๊ฒ์ ํจ์ฌ ๋ ์ง์ฆ์ด๋ฉ๋๋ค. OS ์์ฒด๋ tkinter์ Python์ ์๋ ๋ฐฉ์์ ์ํฅ์์ฃผ์ง ์์์ผํฉ๋๋ค.
ํจ์น๊ฐ wm_overrideredirect๋ฅผ ๋ค์ False๋ก ์ค์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง ์์๋ค๋ ์์์ ๋ฃ๊ณ ์ค๋ง ์ค๋ฝ์ต๋๋ค. ๋ค์์ Mac์์ ์ ๋ชฉ ํ์ ์ค์ด์๋ ๊ฒฝ์ฐ ์คํ๋๋ ์ฝ๋์ ๋๋ค.
MyFlexForm.TKroot.wm_overrideredirect(True)
# Special case for Mac. Need to clear flag again if not tkinter version 8.6.10+
if sys.platform.startswith('darwin') and ENABLE_MAC_NOTITLEBAR_PATCH and (sum([int(i) for i in tclversion_detailed.split('.')]) < 24):
print('* Applying Mac no_titlebar patch *')
MyFlexForm.TKroot.wm_overrideredirect(False)
wm_overrideredirect๋ฅผ ๋ค์ False๋ก ์ค์ ํ๊ธฐ ์ง์ ์ "Application Mac no_titlebar patch"๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
๋ชจ๋ ๋ฒ์ ์ tkinter์์ ๋ชจ๋ Mac OS ๋ฒ์ ์์ ์๋ํ๋ PySimpleGUI ๋ฒ์ ์ ๊ฒ์ํ๊ณ ์ถ์ง๋ง ์ด๊ฒ์ด PySimpleGUI์ ์ด๊ธฐ ์ถ์ ์ดํ ์๋ํด ์์ผ๋ฉฐ ์ต์ ๋ ธ๋ ฅ์ด ์ผ๊ด๋๊ฒ ์งํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ถ์กฑํ๋ค.
์ด ์์ ์์ ๋ด๊ฐ ์๊ณ ์๋ ์ ์ผํ ์๋ ์์ ์ Mac ์ฌ์ฉ์๊ฐ 8.6.10์ ์ค์นํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ์๋ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๋ ๊ฒ ๊ฐ์ต๋๋ค. PySimpleGUI "์์ "์ ๋๊ตฐ๊ฐ ์ ๋ชฉ ํ์ ์ค์ด์๋ ์ฐฝ์ ๋ง๋ค๋ ค๊ณ ํ๊ฑฐ๋ ๋๊ตฌ ์ค๋ช ์ ์ค์ ํ๋ ค๊ณ ํ ๋ ์ธ์๋๋ ์ค๋ฅ ๋ฉ์์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฌ์ฉ์ฑ ๊ด์ ์์ ๋ณผ ๋ ๋์ฐํ ํด๊ฒฐ์ฑ ์ด์ง๋ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ tkinter์ 10 ๋ ๋ ๋ฒ์ ์ ์ค์นํด์ผํ๋ ๊ฒ๋ณด๋ค ๋ ์ข์ต๋๋ค.
Python ๋ฐ tkinter์ ํ๋ธ๋ฅ ์ค์น ์ฌ์ฉ์ ๋ํด ์ฐ๋ คํ๊ณ ์์ต๋๋ค. ํ๋ธ๋ฅ๊ฐ ๋ฌธ์ ์ ์์ธ์ด๋ฉฐ Python.org์์ ์ค์นํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค๋ ์ฌ์ค์ ์๊ฒ ๋ ๊ฒ์ ์๋ ์ ๋ถ๊ณผํ์ต๋๋ค.
wm_overrideredirect
์ ๋ํ ์ถ๊ฐ ํธ์ถ์ ์ถ๊ฐํ๊ฑฐ๋ tkinter root
๊ฐ์ฒด์์ ๋ค๋ฅธ ์์
์ ์ํํ๋ ค๋ ๊ฒฝ์ฐ Window
๋ฉค๋ฒ ๋ณ์ window.TKroot
์ฌ์ฉํ์ฌ ์ง์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค.
๊ด๋ จ์ฑ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง ํ
์คํธ๋ก ์ฐฝ์ ๋ํ modal
์ค์ ์ ํด์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
tk / tcl 8.5.9์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์ถ์ต๋๋ค. ์ ๊ฐ ๊ทธ ๋ฒ์ ์ ์ฌ์ฉํ๋ ์ ์ผํ ์ด์ ๋ homebrew python 3.9.1 ์ค์น์ ํจ๊ป ํจํค์ง ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ๊ทธ๋ค์ด ๋ด๊ฒ ์ค ๊ฒ์ ์ฌ์ฉํ๊ณ ์์๋ค. ๊ทธ๋์ ๋น์ ์ด ๋งํ ๊ฒ์ฒ๋ผ ๊ทธ๊ฒ์ ์์ ๋๋ฌด ๋ฌธ์ ์ผ ์ ์์ต๋๋ค.
python.org ๋ฆด๋ฆฌ์ค ์ค ์ผ๋ถ๋ฅผ ๋ค์ด๋ก๋ํ๋ ๋ฐ ์ฝ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋ ๋น์ ์ด ์ด๊ฒ์ ์์๋ด๋ ๋ฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ง๋ ๋ค๋ฅธ ๋ณ์์ ๋ํด ์ข ๋ ํต์ ๋ ํ ์คํธ๋ฅผ ํ ์์์ ๊ฒ์ ๋๋ค. ์ด ์์ ์ ์ํํ๋ ๋ฐ ์ฝ๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ง๋ง ์ด์ ์ ์ธ๊ธ ํ ๊ฒ ์ธ์ ์๋ํด๋ณด๊ณ ์ถ์ ํน์ ์์ ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
์ ๊ฐ ์ธ๊ธํ๊ณ ์ถ์ ๋ ๋ค๋ฅธ ๊ฒ์ ์ ๊ฐ tkinter๋ฅผ ์ฌ์ฉํ ๋ root.overrideredirect(True)
ํธ์ถ์ํ๋ฉด ์ฐฝ์ด ๋ํ๋์ง ์์ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ PySimpleGUI๋ฅผ ์ฌ์ฉํ ๋ ์ ๋ชฉ ํ์ ์ค์ ์ ๊ฑฐํ์ง๋ ์์ง๋ง ์ฐฝ์ ๋นํ์ฑํ ํ ๋ฟ์ด ๊ธฐ ๋๋ฌธ์ ์ ์๊ฒ ๋ฌผ์ด ๋ณด๋ฉด ๋ ๋ง์ ์์
์ด ์งํ๋ฉ๋๋ค. (<8.6.10 ๋ฒ์ ์ ๊ฒฝ์ฐ)
๋๋ ๋น์ ์ด ์ด๊ฒ์ ์์๋ด๋ ๋ฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ธ์ ....์ด ๊ธฐํ์ ๋ฐ์ด ๋์ด ๋ณผ๊ฒ์. Mac ์ฌ์ฉ์๊ฐ 8.6.10์ ๊ฐ์ ๋ก ์ค์นํ์ง ์๋๋ก์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ต๋๋ค. ์์ ์ฃผ์์ ํตํด ํ์๋ ๊ฒ์ฒ๋ผ ์ฌ์ด ์ผ์ด ์๋๋๋ค.
tk / tcl 8.5.9 ...์ด ๋ฒ์ ์ ์ฌ์ฉํ๋ ์ ์ผํ ์ด์ ๋ homebrew python 3.9.1 ์ค์น์ ํจ๊ป ํจํค์ง ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
WOW .... ์ ํ ํ๋ฒํ WOW ....
Python ์ค์น์ Homebrew๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ด ์๋ ์ด์ ์ ๋ํ ๊ทธ๋ํฝ ์์ ์ ๋๋ค. ํํธ์ผ๋ก๋ "์๋ํ๊ธฐ ๋๋ฌธ์"์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง๋ง ๊ทธ๋ ๊ฒ ๊ฐ๋จํ์ง ์๋ค๊ณ ๋งํ๋ ์ฌ๋์ ๋ณผ ์์์์ต๋๋ค. 8.5.9 ์ดํ ์ถ๊ฐ ๋ tkinter ์ฝ๋์ ์์ tkinter๊ฐ 10 ๋ ๋์ ๊ฐ๋งํ ์์ง ์์๊ธฐ ๋๋ฌธ์ ์๋นํด์ผํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ๋๋ผ์ด ์์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. :-( ์ฐธ ํ๋ ์ ํฌ์ ๋๋ค.
Python.org์์ ์ค์นํด๋ณด์ธ์. ์ผ๋ง ์ ์ Python.org์์ ์ค์นํด์ผ ํ ํ์์ฑ์ ์ค๋ช ์์ ์ถ๊ฐํ์ต๋๋ค.
https://pysimplegui.readthedocs.io/en/latest/#macs
์ด๋ฌํ ๋ฌธ์ ๊ฐ ๊ฐ์๊ธฐ ๋์จ ๊ฒ ๊ฐ์ ๋๋ฌด ์ด์ํฉ๋๋ค. Mac ์ฌ์ฉ์์ ์๋ ์ ์ง ๋ง ์กด์ฌํ๋ฉฐ tkinter์์ PySimpleGUI๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ด 2 ๋ ์ ์ ๋ง๊ฐ ์ก๋ค๋ฉด ๋๊ตฐ๊ฐ ๋ญ๊ฐ ๋งํ์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ๊ทธ๋ค์ ๋ฒํผ ์์ ๋ฌธ์ ์ ๋ํด ๊ฐ์ฅ ํ์คํ ๋ถํํ์ต๋๋ค.
ํ ์คํธ๊ฐ ์ ์คํ๊ฒ ๊ตฌ์ฑ๋๊ณ ์ถ์ ๋๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์กฐํฉ ๋งคํธ๋ฆญ์ค๊ฐ ๋งค์ฐ ์ ์ฉ ํ ๊ฒ์ ๋๋ค.
_ ๋ชจ๋ ๊ฒ์ ์ด์ ๋ฒ์ ์ ์๋ํด๋ณด๊ณ ๋ฌด์ธ๊ฐ๊ฐ ๊นจ์ง ๋๊น์ง ์์ผ๋ก ๋์๊ฐ ์์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ์๊ณ ์ถ์ต๋๋ค ._
๊ทธ๊ฒ์ด ๋์ ์ด์์ ์ธ ๊ณํ์ด ๋ ๊ฒ์ ๋๋ค.
๋ด 2 ์ผํธ. ์ ๋ Mac ์ฌ์ฉ์๋ ์๋์ง๋ง macOS ์ฉ Python์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ๋ฐํด์ผํ๊ธฐ ๋๋ฌธ์ ์ ํ๋ ๊ฒฝํ์ ์ป์์ต๋๋ค.
๋ช ๋ฌ ์ ์ ๋ด ์ต์ ์ ์๋ํ์ ๋ python.org์์ ์ง์ ๋ค์ด๋ก๋ ํ ํ์ด์ฌ ๋ฒ์ ์ ์๋ํ์ต๋๋ค. ๊ทธ ๋น์ ์ ๋ Tcl / Tk 8.6.8๊ณผ ํจ๊ป ์ ๊ณต๋๋ python.org ๋ฒ์ 3.6.8์ ๋ง์ ์๊ฐ์ ๋ณด๋์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ PySimpleGUI์ ๋ค์ํ ์์๋ฅผ ์๋ ํ ๋ ํ์คํ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋จ์ง tkinter๋ผ๊ณ ์๊ฐํ๋ฉฐ macOS๋ฅผ ์ํด ๊ทธ๋ ๊ฒ ์ธ๋ จ๋์ง ์์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Python์ Homebrew ๋ฒ์ ์ Tcl / Tk์ ํจ๊ป ์ ๊ณต๋์ง ์์ต๋๋ค ( ์ฌ๊ธฐ ๋ฐ ์ฌ๊ธฐ ์ฐธ์กฐ). ๋ฌผ๋ก ๋น๊ณต์์ ์ธ "brews"๊ฐ ๋ง์ด์์ ๊ฒ์ ๋๋ค. Pyenv ๋ฒ์ ์ Tcl / Tk์ ํจ๊ป ์ ๊ณต๋์ง ์์ต๋๋ค. ์์์ ๊ฒ์ ํ ํธ๋ฆญ์ ์ฌ์ฉํ์ฌ Tcl / Tk 8.6.10์ ์๋ํ์ต๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด ์ฌ์ ํ ์๋ฒฝํ์ง๋ ์์ง๋ง ํ ์คํธ์์๋ ํ์คํ ๋ ๋์ ์ต์ ์ด์์ต๋๋ค. ์ ํ์ ๋ง๋ค์ด์ผํ๊ณ , ํจ๊ณผ๊ฐ์๋ ๊ฒ๊ณผ ํจ๊ณผ๊ฐ์๋ ๊ฒ์ ํ ์คํธํ๊ณ , ๋ด ํ๋ก์ ํธ์ ํจ๊ณผ๊ฐ์๋ ๊ฒ์ ์ฌ์ฉํ์ต๋๋ค.
BTW, ๋ชจ๋ฌ ์ฐฝ์ Tcl / Tk 8.6.8๊ณผ ํจ๊ป ์ ๊ณต๋๋ python.org ๋ฒ์ 3.6.8์์ ์๋ํ์ง ์์ผ๋ฉฐ pyenv python ๋ฐ Tcl / Tk 8.6.10์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ๋ฅผ๋ณด์ญ์์ค .
ํธ์ง : macOS๋ ์ด์ ์ฒด์ ์ ์ผ๋ถ๋ก Tcl / Tk 8.5.9์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ์ด ์ต์ ๋ฒ์ Tcl / Tk์ ํจ๊ป ์ ๊ณต๋์ง ์๋ ๊ฒฝ์ฐ ํด๋น ๋ฒ์ ์ ์ป๊ฒ๋ฉ๋๋ค. ๋ฐ๋ผ์ Python์ ์ผ๋ฐ brew ์ค์น๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋น Python์ ์ด์ ์ฒด์ ์ ํจ๊ป ์ ๊ณต๋๋ Tcl / Tk ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋์ ์ผ๋ฐ ํ๋ธ๋ฅ ํ์ด์ฌ์ ์ฌ์ฉํ ๋ Tcl / Tk 8.5.9๋ฅผ ์ป์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ๋ด ํธ๋ฆญ์ด pyenv์ ํ์ด์ฌ์๊ฒ tcl-tk์ ์ต์ brew ์ค์น๋ฅผ ์ฌ์ฉํ๋๋ก ๋ช ์ ์ ์ผ๋ก ์ง์ํด์ผํ๋ ์ด์ ์ ๋๋ค.
์ค ... ๊ทธ ๋ชจ๋ฌ์ ์์ ์ด.
์ฐ๋ฆฌ๊ฐ ์คํ ํ ํ์ ํ ์คํธ๋ ๋ชจ๋ฌ์ ๋นํ์ฑํ ํ ์ํ์์ ์๋ ํ ์ ์์ต๋๋ค.
@tkozzer ....์ด ํ์ ํ ์คํธ๋ฅผ ์๋ํด ์ฃผ์๊ฒ ์ต๋๊น?
sg.popup_no_titlebar('This should not have a titlebar', modal=False)
๋ํ drag_anywhere๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด์ด ํ์ ๋ ์๋ํด๋ณด์ธ์.
sg.popup_no_titlebar('This should not have a titlebar', modal=False, grab_anywhere=False)
์ค์ ๋๋ ์ต์ ์ ๋ํด ์ต๋ํ์ ์ ์ด ๋ฐ ๊ฐ์์ฑ์ ์ป์ผ๋ ค๋ฉด ์ฐฝ ๋ง๋ค๊ธฐ๋ก ์ ํํ๋ ๊ฒ์ด ๋ ๋์ ํ ์คํธ ๋ฐฉ๋ฒ ์ผ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํด ์์ ํ ์์๋ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import PySimpleGUI as sg
layout = [[sg.Text('A no-titlebar test')],
[sg.Button('Ok'), sg.Button('Exit')]]
window = sg.Window('Title', layout, no_titlebar=True, grab_anywhere=False, modal=False)
while True:
event, values = window.read()
print(event, values)
if event in (sg.WIN_CLOSED, 'Exit'):
break
window.close()
PyPI๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฉํด์ผํ๋ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฏ๋ก ์ค๋ ๋ฆด๋ฆฌ์ค๋ฅผ ์ค๋นํ๊ณ ์์ต๋๋ค. ๋ชจ๋ ๋ฒ์ ์ tkinter์ ๋ํด Mac์์ ๋ชจ๋ฌ ์ฐฝ์ด ์ค์ ๋ก ์์๋๋ฉด ์ด๋ฒ ๋ฆด๋ฆฌ์ค์์ ๋นํ์ฑํํ๊ฒ ์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ 8.6.10 ๋ฐ ๋ค๋ฅธ ๋ฒ์ ์์ ๋ชจ๋ฌ ์ฐฝ์ด ์ ๋๋ก ์๋ํ์ง ์๋์ง ํ์ธํ ์ ์์ต๋๊น? ๋๋ ์ฌ์ ํ ์ด๋ฌํ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ tkinter์ MacOS์ ์กฐํฉ์ ๋ํด ๋ช ํํ์ง ์์ต๋๋ค.
๋ชจ๋ฌ ์ฐฝ์ด Tcl / Tk 8.6.8๊ณผ ํจ๊ป ์ ๊ณต๋๋ python.org python 3.6.8์์ ์๋ํ์ง ์์์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ Homebrew์ Tcl / Tk 8.6.10๊ณผ ํจ๊ป ์๋ํ๋ pyenv์ python 3.6.11์์๋ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ ํน์ ๋ฌธ์ ๋ก ์๋ํ ์ ์ผํ ๋ฒ์ ์ ๋๋ค.
pyenv๋ ์์ฒด์ ์ผ๋ก ํจํค์ง / ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ตฌ์ฑ์ ๋์์ด๋ฉ๋๋ค. ์ฌ์ ํ ์ค์นํ ํญ๋ชฉ๊ณผ ์ ํ ํ ํญ๋ชฉ์ ์ ํํ๊ณ ์ ํํด์ผํฉ๋๋ค.
Mac์ ๊ฒฝ์ฐ Python ๋ฒ์ ์ tkinter๋งํผ ์ค์ํ์ง ์์ผ๋ฉฐ MacOS ๋ฒ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. tkinter 8.6.8์ 3.6, 3.7, 3.8, 3.9์์ ์ ํํ ๋์ผํ๊ฒ ์คํ๋์ด์ผํฉ๋๋ค. ๋ค๋ฅผ ์์๋ ๊ฒ์ ์ ์ด๋ Windows์ 3.6, 3.7 ๋ฑ์ ์ค์นํ ๋ ์ค์น๋๋ tkinter์ ๋ฒ์ ์ ๋๋ค. Python.org์์ Python์ ๊ฐ์ ธ ์ค๋ ํ ๊ฐ์ง ์ด์ ๋ ์ค์น์ ํจ๊ป ํจํค์ง ๋ ํน์ ๋ฒ์ ์ tkinter๋ฅผ ๊ฐ์ ธ ์ค๊ธฐ ๋๋ฌธ์ ๋๋ค.
Python ๋ฒ์ ์ tkinter๋งํผ ์ค์ํ์ง ์์ผ๋ฉฐ MacOS ๋ฒ์ ์
๋ชจ๋ ํ ์คํธ๋ฅผ์ํ macOS High Sierra ๋ฒ์ 10.13.6.