Seite 1 von 1

wx.py.shell.Shell: Ausgabe von Text in das Shell Fenster

Verfasst: Montag 22. Januar 2007, 14:41
von hmueller
Hallo!

Kann man dieses an sich sehr praktische Fenster [1] auch für Statusausgaben nutzen? Ich hätte schon die Funktionen versucht, die das Ding so anbietet, aber meine Ausgaben wandern alle in den Input der Shell, also wenn ich was rausschreibe und der User drückt dann in der Shell "Enter", gibt's Fehler.

Weiß da jemand einen besseren Weg, wie ich Statusausgaben mit einer PythonShell verbinden kann?

[1] http://wxpython.wxcommunity.com/docs/ap ... class.html

Re: wx.py.shell.Shell: Ausgabe von Text in das Shell Fenster

Verfasst: Montag 22. Januar 2007, 15:44
von gerold
hmueller hat geschrieben:Kann man dieses an sich sehr praktische Fenster auch für Statusausgaben nutzen?
Hi hmueller!

Keine Ahnung! Aber vielleicht genügt es ja schon, wenn du ein ``#`` vor deine Statusausgabe stellst. Das könnte dann evt. als Kommentar betrachtet werden.

mfg
Gerold
:-)

Verfasst: Montag 22. Januar 2007, 15:58
von sape
Hi.

Mit ``write`` geht das.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wx
from wx.py.shell import Shell

wx.SetDefaultPyEncoding("iso-8859-1")


class MainFrame(wx.Frame):
    def __init__(self, parent=None, id=-1, title = "MyApp"):
        wx.Frame.__init__(self, parent, id, title)
        self.Centre()
        self.panel = wx.Panel(self)
        
        pyshell = Shell(parent = self.panel)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(pyshell, 1, wx.EXPAND | wx.ALL, 5)
        self.panel.SetSizer(vbox)
        
        pyshell.write("Hello World\n")
        pyshell.write("Hello World2\n")
        pyshell.write("Hello World3")
         
         
def main():
    app = wx.PySimpleApp()
    mf =  MainFrame()
    mf.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

Output:

Code: Alles auswählen

[...]
Hello World
Hello World2
Hello World3
lg

Re: wx.py.shell.Shell: Ausgabe von Text in das Shell Fenster

Verfasst: Montag 22. Januar 2007, 16:01
von sape
hmueller hat geschrieben:[...]wenn ich was rausschreibe und der User drückt dann in der Shell "Enter", gibt's Fehler.
Ups.

Dann natürlich so wie Gerold vorgeschlagen hat.

Code: Alles auswählen

[...]
pyshell.write("# Hello World\n")
        pyshell.write("# Hello World2\n")
        pyshell.write("# Hello World3")
[...]
EDIT: Aber warum willst du die Shell für Logausgaben benutzen? :?
Bau dir lieber selber was. So ist das nicht besonder Professional.

Verfasst: Montag 22. Januar 2007, 16:03
von hmueller
Naja, das ist ja das was ich meine:

Code: Alles auswählen

self.shell = py.shell.Shell(self.rightwindow)
        self.shell.write("blu\n")
        self.shell.write("bla\n")
Dann drückt der User Enter in der Shell...

Code: Alles auswählen

>>> blu
bla

  File "<input>", line 1
    blu
      
^
SyntaxError: invalid syntax
>>> 

Verfasst: Montag 22. Januar 2007, 16:05
von hmueller
ah, ok, hast den Fehler eh schon bemerkt :)

Selber bauen heisst was?
Ich hätte gern ein Fenster, in dem die Logausgaben erscheinen, und der User aber auch Shell kommandos abgeben kann.

Gibt's da was oder muss ich das auch noch selbst bauen?

Verfasst: Montag 22. Januar 2007, 16:22
von sape
Ach so, du willst das Logfenster gleichzeitig als richtige Shell verwenden.
Naja, ich würde die beiden Bereich von einander trennen.

Ob es schon eine fertige Lösung gibt für ein Log-Fenster weiß ich nicht.

Aber ein Widget zu bauen ist nicht so aufwendig. Je nachdem was du willst.
Du könntest z.B. von ``html.HtmlWindow`` (Wobei du hier noch viele Formatierungsmöglichkeiten per HTML hast, icons, etc) oder ``ListCtrl``erben.

Am simpelsten wäre es aber direkt was mit ``TextCtrl`` zu machen, das nach aussen hin nur zum Lesen Aktiviert ist. Dann kann nur dein Programm (und nicht der Benutzer selber) dort seine Meldungen reinschreiben.

Ich hatte mir damals dafür ein Widget, dass von ``html.HtmlWindow`` erbt, geschrieben. Ist aber noch nicht richtig Fertig (Muss noch eine Möglichkeit für eine optionale Umleitung von stderr und/oder stdout implementieren und docstrings schreiben.)

lg

Verfasst: Samstag 27. Januar 2007, 18:04
von sape
@hmueller: Wichtiger Hinweis!

wx.lib.shell

ist
########################################\\
# THIS MODULE IS NOW DEPRECATED |
# |
# Please see the most excellent PyCrust |
# package instead. |
########################################/
Es wird also demnächst wegfallen.

Benutze stattdessen ``Shell`` aus folgenden Package: wx.py.shell


lg

Verfasst: Samstag 27. Januar 2007, 20:10
von hmueller
Danke, aber das tu' ich sowieso.

Ich werd' mal mit $Chef sprechen, wie er sich das genau vorstellt, aber ich glaube einfach Log und Shell zu trennen ist das einfachste.