[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