Moi import programu baza to interfejs GUI ze skryptu GUI.pyjak przekierować stdout do widgetu Tekst Tkinter
old_stdout = sys.stdout
root = Tk.Tk()
root.title('Coursera-dl')
root.geometry("345x230")
app = GUI.Interface(root)
app.mainloop()
if app.button_press() == True and app.return_data():
data = app.return_data()
main(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7],data[8])
sys.stdout = old_stdout
W moim GUI.py:
class Interface(ttk.Frame):
def __init__(self,parent=None):
ttk.Frame.__init__(self,parent)
self.parent = parent
self.New_Window()
def New_Window(self):
self.newWindow = Tk.Toplevel(self.parent)
self.app = CoreGUI(self.newWindow)
class StdoutRedirector(object):
def __init__(self,text_widget):
self.text_space = text_widget
def write(self,string):
self.text_space.insert('end', string)
self.text_space.see('end')
class CoreGUI(object):
def __init__(self,parent):
self.parent = parent
self.InitUI()
def InitUI(self):
self.text_box = Tk.Text(self.parent, wrap='word', height = 11, width=50)
self.text_box.grid(column=0, row=0, columnspan = 2, sticky='NSWE', padx=5, pady=5)
sys.stdout = StdoutRedirector(self.text_box)
Ale co robi to otwiera dwa okna i pierwsze okno (pierwszy poziom) działa zgodnie z oczekiwaniami, a drugie to bezczynne, To jest oczekiwane, dopóki nie kliknę konkretnego przycisku, które po naciśnięciu dane drukuje w sposób ciągły i dane drukowane powinny pojawić się w widgecie tekstowym drugim oknie za jednak tak się nie dzieje i nie ma odpowiedzi z programu i kiedy zamknąć Toplevel okno pojawia się komunikat o błędzie
"TclError: invalid command name "".33328904.33329104"""
Więc jak mogę wydrukować dane w Widgecie tekstowym, a nie w konsoli?
EDIT:
Inorder pomóc ya jeśli zmaga się z tym, zrobiłem skrypt, aby przekierować stdout do widgetu Tekst Tkinter, widzieć go w akcji here :-)
Może Ci pomóc stworzyć [krótki, samodzielny, działający przykład] (http://sscce.org/), który demonstruje twój problem. Na SO jest dużo leniwych użytkowników ([jak powinno być] (http://c2.com/cgi/wiki?LazinessImpatienceHubris)), więc im łatwiejsze będzie wykonanie debugowania programu, tym więcej otrzymasz odpowiedzi . – Kevin