mio programma di base importazioni è l'interfaccia grafica da uno script GUI.pyCome reindirizzare stdout a un widget Tkinter Testo
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
Nel mio 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)
Ma ciò che fa è apre due finestre e la prima finestra (quella di primo livello) funziona come previsto e il secondo è inattivo, Questo è ciò che è previsto finché non faccio clic su un determinato pulsante che dopo aver premuto stampa i dati in modo continuo ed i dati stampati dovrebbero apparire nella widget di testo della seconda finestra di tuttavia questo non accade e non v'è alcuna risposta dal programma e quando chiudo la finestra di primo livello appare un messaggio di errore
"TclError: invalid command name "".33328904.33329104"""
Quindi, come posso stampare i dati in Text Widget piuttosto che nella console?
EDIT:
Inorder per aiutare ya se alle prese con questo, ho fatto uno script per reindirizzare stdout a un widget Tkinter testo, vedere in azione here :-)
Potrebbe essere utile creare [un esempio breve, autosufficiente e eseguibile] (http://sscce.org/) che mostri il problema. Ci sono molti utenti pigri su SO ([come dovrebbe essere]] (http://c2.com/cgi/wiki?LazinessImpatienceHubris)), quindi più facilmente esegui il debug del tuo programma, più risposte riceverai . – Kevin