Python Tkinter : <Destroy> 이벤트 콜백에서 ScrolledText 위젯에서 텍스트를 가져 오는 방법은 무엇입니까?

엑스 맨

ScrolledText가 Text 개체로 구성되어 있음을 이해합니다 (그러나 프레임에 함께 연결된 스크롤 막대가 있음). 그러나 다음 코드는 창이 닫히고 printText()메서드가 호출 될 때 오류를 발생시킵니다 .

import Tkinter as tk
import ttk
import ScrolledText as st
class tkGui(object):
    def printText(self, event):
        print "It works!"
        self.mText.get("1.0", 'end-1c')

    def __init__(self, window):
        # create widgets
        self.frame=tk.Frame(window)
        self.mText = st.ScrolledText(self.frame)
        self.mText.bind('<Destroy>',self.printText)
        # place widgets
        self.frame.pack()
        self.mText.pack()

window = tk.Tk()
app = tkGui(window)
window.mainloop()

오류:

[...]
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 3077, in get
  return self.tk.call(self._w, 'get', index1, index2)
TclError: invalid command name ".140506094171344.140506094172280.140506094172496"

내가 무엇을 잘못하고 있지?

Saulspatz

기본 창을 파괴하면 모든 하위 위젯이 파괴되고 액세스 할 수 없습니다. (Bryan Oakley의 답변이 지적했듯이 이것은 기술적으로 정확하지는 않지만 내가 생각하는 방식입니다. 파괴 후 위젯으로 작업하려고 시도하는 것은 기껏해야 문제가 있습니다.)

당신은 사용해야합니다 wm_protocol

http://nullege.com/codes/search/Tkinter.Tk.wm_protocol

import Tkinter as tk
import ttk
import ScrolledText as st
class tkGui(object):
    def printText(self):
        print "It works!"
        self.mText.get("1.0", 'end-1c')
        self.window.destroy()

    def __init__(self, window):
        # create widgets
        self.window = window
        self.frame=tk.Frame(window)
        self.mText = st.ScrolledText(self.frame)
        #self.mText.bind('<Destroy>',self.printText)
        window.wm_protocol("WM_DELETE_WINDOW", self.printText)
        # place widgets
        self.frame.pack()
        self.mText.pack()

window = tk.Tk()
app = tkGui(window)
window.mainloop()

여기에 몇 가지 변경 사항이 있습니다. 에서 event매개 변수를 제거 printText하고에 대한 호출을 추가했습니다 self.window.destroy. self.window이 호출을 하려면 속성을 추가해야했습니다 . 기본 변경은 이벤트에 바인딩하는 대신 wm_protocol을 사용하는 것입니다. 나머지는 필요한 결과입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관