문제

어떻게 티킨터를 불러 일으키나요? event 별도의 개체에서?

나는 wxwidgets와 같은 것을 찾고 있습니다 wx.CallAfter. 예를 들어, 객체를 만들고 그것을 전달하면 Tk 루트 인스턴스, 그런 다음 내 객체에서 해당 루트 창의 메소드를 호출하려고합니다. 내 앱이 잠겨 있습니다.

내가 생각해 낼 수있는 최선은 after 방법을 확인하고 별도의 개체에서 상태를 확인하지만 낭비적인 것 같습니다.

도움이 되었습니까?

해결책

"별도의 개체에서 Tkinter 이벤트를 어떻게 호출합니까?"라는 구체적인 질문에 답하기 위해 event_generate 명령. 루트 창의 이벤트 대기열에 이벤트를 주입 할 수 있습니다. TK의 강력한 가상 이벤트 메커니즘과 결합하여 편리한 메시지 전달 메커니즘이됩니다.

예를 들어:

from tkinter import *

def doFoo(*args):
    print("Hello, world")

root = Tk()
root.bind("<<Foo>>", doFoo)

# some time later, inject the "<<Foo>>" virtual event at the
# tail of the event queue
root.event_generate("<<Foo>>", when="tail")

주목하십시오 event_generate 전화는 즉시 돌아옵니다. 그것이 당신이 원하는지 아닌지는 확실하지 않습니다. 일반적으로 말하면 이벤트 기반 프로그램이 특정 이벤트에 대한 응답을 기다리는 것을 차단하는 것을 원하지 않습니다. GUI를 얼립니다.

그래도 이것이 당신의 문제를 해결하는지 확실하지 않습니다. 코드를 보지 않고 나는 당신의 실제 문제가 무엇인지 잘 모르겠습니다. 예를 들어, 앱이 잠그지 않고 루트가 전달되는 객체의 생성자에 루트의 액세스 방법을 사용할 수 있습니다. 이것은 당신의 코드에 다른 일이 일어나고 있음을 알려줍니다.

다음은 다른 개체에서 루트 창의 메소드에 성공적으로 액세스하는 예입니다.

from tkinter import *

class myClass:
    def __init__(self, root):
        print("root background is %s" % root.cget("background"))

root = Tk()
newObj = myClass(root)

다른 팁

여기에서는 위의 Bryan의 답변을 더 잘 이해하기 위해 일부 문서와 링크 만 있습니다.

기능 설명 뉴 멕시코 기술 :

w.event_generate(sequence, **kw)

이 방법은 외부 자극없이 이벤트가 트리거됩니다. 이벤트 처리는 외부 자극에 의해 유발 된 것과 동일합니다. 시퀀스 인수는 트리거 될 이벤트를 설명합니다. 키워드 = 값 인수를 제공하여 이벤트 객체에서 선택한 필드에 대한 값을 설정할 수 있습니다. 여기서 키워드는 이벤트 객체의 필드 이름을 지정합니다.

TCL/TK 이벤트 속성의 목록 및 설명 여기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top