복붙노트

[PYTHON] Tk의 여러 인스턴스가 왜 낙심하나요?

PYTHON

Tk의 여러 인스턴스가 왜 낙심하나요?

아래 예제를 고려하십시오.

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. ==============================

    1.Tkinter는 임베디드 Tcl 인터프리터를 둘러싼 Python 래퍼로서 Tk 라이브러리를 임포트합니다. 루트 창을 만들 때 Tcl 인터프리터의 인스턴스를 만듭니다.

    Tkinter는 임베디드 Tcl 인터프리터를 둘러싼 Python 래퍼로서 Tk 라이브러리를 임포트합니다. 루트 창을 만들 때 Tcl 인터프리터의 인스턴스를 만듭니다.

    각 Tcl 인터프리터는 격리 된 샌드 박스입니다. 한 샌드 박스의 객체는 다른 샌드 박스의 객체와 상호 작용할 수 없습니다. 가장 일반적인 표현은 하나의 인터프리터에서 작성된 StringVar을 다른 인터프리터에서 볼 수 없다는 것입니다. 위젯의 경우에도 마찬가지입니다. 다른 인터프리터에서 상위 위젯으로 사용되는 하나의 인터프리터에서는 위젯을 만들 수 없습니다.

    기술적 인 관점에서 볼 때 동시에 두 개의 Tk 인스턴스를 가질 수있는 이유는 없습니다. 이에 대한 권장 사항은 둘 이상의 별개의 Tcl 해석기를 실제로 가질 필요가 거의 없기 때문에 초보자가 이해하기 어려운 문제를 유발하기 때문입니다.

    문제의 두 번째 예가 당신이 성취하려는 것을 모른 채로 더 나은지 아닌지를 말하는 것은 불가능합니다. 아마도 실제로 두 인스턴스가 필요할 때가 거의 없기 때문에 더 나을 것입니다.

    가장 좋은 해결책은 99.9 %의 시간이 프로그램 수명 동안 사용하는 Tk 인스턴스를 하나만 생성하는 것입니다. 간단히 말해서 tkinter와 기본 Tcl / Tk 인터프리터가 어떻게 사용되도록 설계되었는지입니다.

  2. ==============================

    2.지금까지 찾은 최고의 참고 자료는 tkinterbook의이 섹션입니다.

    지금까지 찾은 최고의 참고 자료는 tkinterbook의이 섹션입니다.

    Tk 인스턴스가 Toplevel 위젯을 생성하고 메인 루프와 같은 것들을 생성한다는 것을 알아두기 바란다.

  3. from https://stackoverflow.com/questions/48045401/why-are-multiple-instances-of-tk-discouraged by cc-by-sa and MIT license