2014-04-24 3 views
0

나는 tkinter 기반의 텍스트 위젯을 만들고 있는데, 그 안에 새로운 윈도우 기능을 구현하려고합니다. RuntimeError에 :파이썬 : Tkinter 텍스트 위젯, 새 창 버튼

#!/usr/bin/env python 
from Tkinter import * 
from tkSimpleDialog import askstring 
from tkFileDialog import asksaveasfilename 
from tkFileDialog import askopenfilename 
from tkMessageBox import askokcancel 
import Tkinter as tk 
import ttk 
import threading 
from ScrolledText import ScrolledText 
Window = Tk() 
Window.title("TekstEDIT") 

/..CODE.../ 

class newWindowThread(threading.Thread): 
    def __init__(self, choosen=""): 
     threading.Thread.__init__(self) 
     self.choosen = choosen 
    def run(self): 
     if self.choosen == "": 
      root = Tk() 
      newEditor = SimpleEditor(root) 
      root.mainloop() 
     else: 
      root = Tk() 
      newEditor = SimpleEditor(root, self.choosen) 
      root.mainloop() 
/...CODE.../ 
wFile = Menu(menubar, tearoff=0,relief="raised") 
    wFile.add_command(label="New", accelerator="Ctrl+N", command=self.onNew) 
    wFile.add_command(label="New Window", accelerator="Ctrl+Shift+N", command=self.onNewWindow) 
/...CODE.../ 
def onNewWindow(self): 
    t=newWindowThread() 
    t.start() 

문제의 원인은 무엇입니까 :

여기 내 코드의 다른 아파트

에서 티클를 호출하지만 새 윈도우 버튼을 클릭 할 때마다 나는 IDLE에서이 오류가? 어떻게 해결할 수 있습니까?

소스 코드 : http://ideone.com/npWuYD

감사합니다.

답변

1

이렇게하면 Tkinter와 스레딩을 혼합 할 수 없습니다. Tkinter는 스레드로부터 안전하지 않습니다. 또한 tkinter는 Tk이라는 단일 인스턴스 만 실행되도록 설계되었습니다.

여러 창을 원하면 스레드가 필요하지 않으며 Tk의 다중 인스턴스가 필요하지 않습니다. 평소처럼 루트 창을 만들고 다른 창은 Toplevel의 인스턴스를 만듭니다.