[python] Presmerovanie stdout do okna v Tkinteri

Jakub Vojáček Jakohv na seznam.cz
Středa Leden 31 16:45:06 CET 2007


> Jakub Vojáček napsal:
> > A jak bys to předělal aby to to zobrazovalo i chyby?  Přesměrovat print se mi
> podařilo, ale chyb ne:(
> > například eval("error")
> >
> >   
> já věděl, že se ti to bude líbit ;-)
> 
> sys.stderr = text_window
> print tojealechyba
> 
> -- 
> geon
> Pavel Kosina

Líbí;-)

ale narazil jsem na další problém. Když bych trochu upravil kod:
# -*- coding: cp1250 -*-
from Tkinter import *
from ScrolledText import ScrolledText
import sys
import traceback

class py_message_box:
    def __init__(self, parent):

        self.frame = Frame(parent)
        self.frame.pack()
        self.text = ScrolledText(self.frame, 
background='black',foreground='green', font=("Courier", 9))
        self.text.pack()
   
        self.mybutton = Button(self.frame, text="Quit", 
command=self.mybuttonClick)
        self.mybutton.pack(fill=BOTH) #roztažení
    
    def mybuttonClick(self):
        self.frame.destroy()   # mě nikdy quit() nefungovalo...

    def write(self, s):
        self.text.insert(END, s)
        self.text.see(END)  # aby bylo poslední vždy vidět

root=Tk()
text_window = py_message_box(root)
sys.stdout = text_window
sys.stderr = text_window
r="""\
from Tkinter import*
Button(text="ok").pack()
mainloop()"""
soubor=file('a.txt','w')
soubor.write(r)
soubor.close()
try:
    execfile('a.txt')
except:   
    traceback.print_exc()
root.mainloop()

a když to spustím tak to vykreslí to tlačítko do toho okna místo aby to otevřelo vlastní:( asi bych si musel vytvořit thread, nebo jak??


Blujacker


Další informace o konferenci Python