[PYTHON] Tk의 여러 인스턴스가 왜 낙심하나요?
PYTHONTk의 여러 인스턴스가 왜 낙심하나요?
아래 예제를 고려하십시오.
import tkinter as tk
root = tk.Tk()
root.title("root")
other_window = tk.Tk()
other_window.title("other_window")
root.mainloop()
그리고 한번에 Tk 백투백의 인스턴스를 생성하는 예제를 보아라. 그래서 주어진 시간에 정확히 한개의 Tk 인스턴스가있다.
import tkinter as tk
def create_window(window_to_be_closed=None):
if window_to_be_closed:
window_to_be_closed.destroy()
window = tk.Tk()
tk.Button(window, text="Quit", command=lambda arg=window : create_window(arg)).pack()
window.mainloop()
create_window()
해결법
-
==============================
1.Tkinter는 임베디드 Tcl 인터프리터를 둘러싼 Python 래퍼로서 Tk 라이브러리를 임포트합니다. 루트 창을 만들 때 Tcl 인터프리터의 인스턴스를 만듭니다.
Tkinter는 임베디드 Tcl 인터프리터를 둘러싼 Python 래퍼로서 Tk 라이브러리를 임포트합니다. 루트 창을 만들 때 Tcl 인터프리터의 인스턴스를 만듭니다.
각 Tcl 인터프리터는 격리 된 샌드 박스입니다. 한 샌드 박스의 객체는 다른 샌드 박스의 객체와 상호 작용할 수 없습니다. 가장 일반적인 표현은 하나의 인터프리터에서 작성된 StringVar을 다른 인터프리터에서 볼 수 없다는 것입니다. 위젯의 경우에도 마찬가지입니다. 다른 인터프리터에서 상위 위젯으로 사용되는 하나의 인터프리터에서는 위젯을 만들 수 없습니다.
기술적 인 관점에서 볼 때 동시에 두 개의 Tk 인스턴스를 가질 수있는 이유는 없습니다. 이에 대한 권장 사항은 둘 이상의 별개의 Tcl 해석기를 실제로 가질 필요가 거의 없기 때문에 초보자가 이해하기 어려운 문제를 유발하기 때문입니다.
문제의 두 번째 예가 당신이 성취하려는 것을 모른 채로 더 나은지 아닌지를 말하는 것은 불가능합니다. 아마도 실제로 두 인스턴스가 필요할 때가 거의 없기 때문에 더 나을 것입니다.
가장 좋은 해결책은 99.9 %의 시간이 프로그램 수명 동안 사용하는 Tk 인스턴스를 하나만 생성하는 것입니다. 간단히 말해서 tkinter와 기본 Tcl / Tk 인터프리터가 어떻게 사용되도록 설계되었는지입니다.
-
==============================
2.지금까지 찾은 최고의 참고 자료는 tkinterbook의이 섹션입니다.
지금까지 찾은 최고의 참고 자료는 tkinterbook의이 섹션입니다.
과
Tk 인스턴스가 Toplevel 위젯을 생성하고 메인 루프와 같은 것들을 생성한다는 것을 알아두기 바란다.
from https://stackoverflow.com/questions/48045401/why-are-multiple-instances-of-tk-discouraged by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 어디에서 플라스크에 비밀 키를 두어야합니까? (0) | 2018.10.15 |
---|---|
[PYTHON] 리터럴의 속성에 액세스하는 것은 모든 유형에서 작동하지만 'int'에서 작동하지 않습니다. 왜? (0) | 2018.10.15 |
[PYTHON] int 목록을 사용하는 희소 행렬 분할 (0) | 2018.10.15 |
[PYTHON] 부울 식을 사용하여 문자열 지정 [duplicate] (0) | 2018.10.15 |
[PYTHON] 두 문자열 사이의 정규식 일치? (0) | 2018.10.15 |