[python] Presmerovanie stdout do okna v Tkinteri

Michal Vyskocil michal.vyskocil na gmail.com
Úterý Leden 30 22:58:07 CET 2007


Dne úterý 30 leden 2007 17:17 RMiklos na pss.sk napsal(a):
> Nazdar,
> Mam command-line programm, ktory pise rozne chybove hlasky cez print na
> stdout.
> Rad by som ho prerobil do GUI v Tkinteri, ale bez toho aby som musel
> namiesto printov vkladat tie retazce do widgetu ScrolledText,
> t.j. aby som nemusel kazdy prikaz
>         print errormsg
> prepisovat na
>         self.textokno.insert(END, msg)
> kde
>         self.textokno = ScrolledText(..)
>
> Je nejaky sposob, ako presmerovat stdout do textoveho okna?
> (napriklad podobne ako sa da stdout presmerovat do suboru?)
> Kto by mi vedel poradit?

Neco takoveho by slo (a to jenom mozna) v plan9, ale v beznych OS ne (rozhodne 
ne nijak jednoduse). stdout je z pohledu systemu bran jako soubor (majici 
vlastni deskriptor a v unixech dokonce vlastni souborovou reprezentaci 
v /dev/).

Bohuzel neni print v Pythonu normalni funkce, ale syntakticka konstrukce, 
takze nic jako def print() napsat nejde.

Takze moznosti jsou asi tyto

1.) najit a nahradit v textovem editoru

2.) nadefinovat si vlastni funkci def tkprint()

3.) zabalit to do tridy, aby to fungovalo obecneji (pochopitelne mohou byt 
promenne a metody staticke, pokud nam staci jeden widget se stdout)

class TkPrint:
	def __init__(self, win):
		self.win = win
	def tkprint(self, msg):		# pozor, metoda se nesmi jmenovat print
		self.win.insert(END, msg)

IMHO je print jednou z bolistek Pythonu ...

-- 
best regards
Michal Vyskocil


Další informace o konferenci Python