Tabelle auf Bildschirm ausgeben

Plattformunabhängige GUIs mit wxWidgets.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Tabelle auf Bildschirm ausgeben

Beitragvon sea-live » Donnerstag 13. März 2008, 18:43

Servus
gibt es zur Ausgabe von Tabellen csvFiles in wx ein Modul

oder muss ich mir das selber Basteln

Ausgabe in eigenem FRAME auf den Bildschirm Formatiert und in FARBE wenn möglich
wäre super!!



Code: Alles auswählen

        # Einlesen der daten  csv )

        file_in =open("test.csv", 'rb')
        reader =csv.DictReader(file_in)
        data = list(reader)
        file_in.close()
Pumeluk2
User
Beiträge: 26
Registriert: Samstag 24. März 2007, 11:24

Beitragvon Pumeluk2 » Freitag 14. März 2008, 09:06

Hallo,

da wäre wx.ListCtrl, allerdings kannst du damit nur Zeilen einfärben, keine einzelnen Zellen.

Falls du letzteres benötigst, schau dir mal wx.html.HtmlWindow an. Damit kannst du praktisch html-Frames erzeugen.

Infos dazu gibt es in der wxPython Demo.

Grüße,
Pumeluk2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 14. März 2008, 13:24

Hallo!

Für anspruchsvollere Aufgaben gibt es noch das "Grid". Suche in der wxPython-Demo danach.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Freitag 14. März 2008, 20:13

Danke das hat hingehauen !

Ich hab keine Methode gefunden die mir die Zeilennummerierung ausblendet geht das überhaupt
die liste DATA ist nach Datum Sortiert und das ist auch die von mir gewünschte Rheienfolge

DANKE nochmals!



Code: Alles auswählen

        file_in =open("%s%s\\%s.csv"%(self.pfad,self.listenname,self.dateiname), 'rb')
        data=list()
        for  line in file_in:
            data.append(line[:-1])
        file_in.close()
        self.anzahlReihen=len(data)
        self.anzahlSpalten=len(data[0].strip().split(","))
        self.CreateGrid(self.anzahlReihen,self.anzahlSpalten)#, gridlib.Grid.SelectRows)
        ##self.EnableEditing(False)

        # simple cell formatting
        i=0
        for we in data[0].strip().split(","):
            self.SetColLabelValue(int(i),str(we))
            i=i+1
 
        self.SetDefaultCellAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)

        reihe=1
        while reihe < len(data):
            spalte=0
            for wert in data[reihe].strip().split(","):
                self.SetCellValue(reihe, spalte,str(wert))
                spalte=spalte+1
            reihe=reihe+1
        # attribute objects let you keep a set of formatting values
        # in one spot, and reuse them if needed
        attrc1 = gridlib.GridCellAttr()
        attrc1.SetTextColour(wx.BLACK)
        attrc1.SetBackgroundColour(wx.Colour(200,200,20))
        attrc1.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
        attrc2 = gridlib.GridCellAttr()
        attrc2.SetTextColour(wx.BLACK)
        attrc2.SetBackgroundColour(wx.GREEN)
        attrc2.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
        attrc3 = gridlib.GridCellAttr()
        attrc3.SetTextColour(wx.BLACK)
        attrc3.SetBackgroundColour(wx.RED)
        attrc3.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
        attrc4 = gridlib.GridCellAttr()
        attrc4.SetTextColour(wx.BLACK)
        attrc4.SetBackgroundColour(wx.CYAN)
        attrc4.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))

        # you can set cell attributes for the whole row (or column)
        self.SetColAttr(3, attrc3)
        self.SetColAttr(2, attrc2)
        self.SetColAttr(1, attrc1)
        self.SetColAttr(4, attrc4)
 
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Freitag 14. März 2008, 22:36

Es seinen mir noch einige Anmerkungen zu deinem Code erluabt ;-) :

Schau dir mal im Modul "os" die Funktion "path" an, um Pfade zusammenzustellen. (Edit: natürlich os.path.join)

Die erste for-Schleife kannst du etwas kompakter schreiben:

Code: Alles auswählen

data = [line[:-1] for line in file_in]


Nach PEP8 gehören vor und nach einem Gleichheitszeichen jeweils ein Leerzeichen. Auch werden Wörter in Variablennamen mit einem Unterstrich getrennt: ich_bin_ein_variablenname.

Die Schleife

Code: Alles auswählen

i=0
        for we in data[0].strip().split(","):
            self.SetColLabelValue(int(i),str(we))
            i=i+1

kannst du vereinfachen in:

Code: Alles auswählen

for i, we in enumerate(data[0].strip().split(",")):
    self.SetColLabelValue(int(i),str(we))


Und

Code: Alles auswählen

reihe=1
        while reihe < len(data):
            spalte=0
            for wert in data[reihe].strip().split(","):
                self.SetCellValue(reihe, spalte,str(wert))
                spalte=spalte+1
            reihe=reihe+1

kannst du auch schreiben als:

Code: Alles auswählen

for r, reihe in enumerate(data[1:])
    for s, wert in enumerate(reihe.strip().split(",")):
        self.SetCellValue(r+1, s, str(wert))


Und der letze Abschnitt geht natürlich noch viel kürzer:

Code: Alles auswählen

for index, color in enumerate(wx.RED, wx.GREEN, wx.Colour(200,200,20), wx-CYAN):
    attr = gridlib.GridCellAttr()
    attr.SetTextColour(wx.BLACK)
    attr.SetBackgroundColour(color)
    attr.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
   
    self.SetColAttr(index+1, attr)
Zuletzt geändert von EyDu am Samstag 15. März 2008, 18:37, insgesamt 2-mal geändert.
BlackJack

Beitragvon BlackJack » Samstag 15. März 2008, 08:06

Anstelle des ``line[:-1]`` würde ich eher mit der `strip()`- oder `rstrip()`-Methode arbeiten.
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 15. März 2008, 13:01

Stimmt, in Verbindung mit "map" sieht es dann gleich lesbarer aus.

Alternativ würde sich dann aber auch wohl gleich das "csv"-Modul anbieten.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Samstag 15. März 2008, 13:42

EYDU Danke für die Codeverbesserungen!

Frage war kann ich die Nummerierung der Tabelle entfernen?
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 15. März 2008, 14:08

Die Lösung findet man doch in der Demo zu wxPython: Beispiel Grid, "wx.Grid using a custom Table, with non-string data".

Was du suchst ist die Methode "SetRowLabelSize" auf einem Grid:

Code: Alles auswählen

grid.SetRowLabelSize(0)
.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Samstag 15. März 2008, 18:27

DAnke EyDu

die Doku ist nicht gerade UserFreundlich keine erklärung zu den Methoden nur Syntax

zu ***os.path.join***
gibts nur was bei WIKI nix in der Docu

wer suchet der findet

bis dann !

DANKE

Code: Alles auswählen

        file_in =open("%s%s\\%s.csv"%(self.pfad,self.listenname,self.dateiname), 'rb')
        data=list()
        data = [line[:-1] for line in file_in]
        file_in.close()
        self.anzahlReihen=len(data) - 1      #data 0 enthält überschriften
        self.anzahlSpalten=len(data[0].strip().split(","))
        self.CreateGrid(self.anzahlReihen,self.anzahlSpalten)#, gridlib.Grid.SelectRows)
        ##self.EnableEditing(False)

        for i, we in enumerate(data[0].strip().split(",")):
             self.SetColLabelValue(int(i),str(we))

        self.SetDefaultCellAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)
        self.SetDefaultCellFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
        self.SetDefaultCellTextColour(wx.BLACK)

        for r, reihe in enumerate(data[1:]):
            for s, wert in enumerate(reihe.strip().split(",")):
                self.SetCellValue(r, s,str(wert))
                self.SetReadOnly(r,s,True)
        farben = (wx.Colour(200,200,20), wx.GREEN,wx.RED,  wx.CYAN)
        for index, color in enumerate(farben):
            attr = gridlib.GridCellAttr()
            attr.SetTextColour(wx.BLACK)
            attr.SetBackgroundColour(color)
            attr.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
           
            self.SetColAttr(index+1, attr)
        #self.AutoSize()
        self.SetRowLabelSize(0)
   
BlackJack

Beitragvon BlackJack » Samstag 15. März 2008, 19:08

Von welcher Doku redest Du hier? Zu `os.path.join()` steht da doch etwas drin: http://docs.python.org/lib/module-os.path.html
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Beitragvon sea-live » Sonntag 16. März 2008, 08:53

Danke ich hatte in der wx Docu gesucht
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 16. März 2008, 10:13

sea-live hat geschrieben:die Doku ist nicht gerade UserFreundlich keine erklärung zu den Methoden nur Syntax

Hallo sea-live!

Erklärungen zu WX-Objekten und Methoden findest du direkt in der WX-Hilfe und nicht in der von wxPython.

http://wxwidgets.org/manuals/stable/wx_contents.html

Besonders interessant ist der Punkt "Alphabetical class reference".

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

initialisierung der tabelle schlägt fehl

Beitragvon sea-live » Samstag 26. April 2008, 10:22

Servus warum schlägt diese initialisierung fehl

aufruf via Frame Classe

Code: Alles auswählen

class TabelleFrame(wx.Frame):
    def __init__(self,pfad,listenname,dateiname
                 ,parent = None, id = -1,title="Daten zu Chart ",size = wx.Size(640,480)
        ):
        self.pfad=pfad
        self.listenname=listenname
        self.dateiname=dateiname
        wx.Frame.__init__(self, parent, id, title, size = size)
        self.Bind(wx.EVT_CLOSE, self.on_close)

        self.grid = Tabelle(self,self.pfad,self.listenname,self.dateiname)


eigentliche Tabelle

Code: Alles auswählen

class Tabelle(gridlib.Grid): ##, mixins.GridAutoEditMixin):
    def __init__(self,pfad,listenname,dateiname, parent):
        gridlib.Grid.__init__(parent, -1)
        ##mixins.GridAutoEditMixin.__init__(self)
        #self.log = log
        self.moveTo = None

        self.pfad=pfad
        self.listenname=listenname
        self.dateiname=dateiname
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 26. April 2008, 10:26

Was schlägt denn fehl? Gibt es eine Fehlermeldung und wenn ja, welche?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder