Seite 1 von 1

Hilfe für ListCtrl

Verfasst: Dienstag 22. Januar 2008, 21:44
von tomate
Hallo!

Ich würde gerne eine Ausgabe in einem Fenster darstellen. Der Code sieht wie folgt aus:

Code: Alles auswählen

        for element in list:
            ele =str(element)
            msg = msg + ele + "\n\r"


        dlg = wx.lib.dialogs.ScrolledMessageDialog(self, msg, "Ausgabe", size=(355, 330))
        dlg.ShowModal() 

Aufgrund der unterschiedlichen Werte sieht die Ausgabe jedoch nicht optimal aus:
(11.4636002, (27, 10))
(10.7862, (10, 23))
(10.723029, (10, 22))
(10.6089, (2, 11))
Kann mir jemand sagen wie ich die Ausgaben besser darstellen kann. Gibt es vielleicht die Möglichkeit ohne größeren Aufwand eine Tabelle mit 2 Spalten zu erstellen?

Danke

Verfasst: Mittwoch 23. Januar 2008, 10:18
von hmueller
Du müsstest dein "element" (aus for element in list) besser formatieren. Ohne genaue Angabe, wie das aufgebaut ist, kann ich nur vermuten....

Code: Alles auswählen

ele = "%s\t\t%s\t%s" % (str(element[0]), (str(element[1][0]), str(element[1][1]))

Verfasst: Mittwoch 23. Januar 2008, 10:36
von Zap
Mh.. :?
Also das ist vielleicht eine Lösung für eine Consolenausgabe aber wenn man eh eine Gui hat würde ich doch ein ListCtrl verwenden was in einem eigenen Kleinen Dialog eingebaut ist.
Einfach mal nach kleinen Beispielen suchen oder sich die Demo genauer anschauen.

Verfasst: Mittwoch 23. Januar 2008, 11:59
von tomate
hmueller hat geschrieben:Du müsstest dein "element" (aus for element in list) besser formatieren. Ohne genaue Angabe, wie das aufgebaut ist, kann ich nur vermuten....

Code: Alles auswählen

ele = "%s\t\t%s\t%s" % (str(element[0]), (str(element[1][0]), str(element[1][1]))
Also ich hab ein Dictionary mit Keys vom Format (10, 11) usw.
Die zugeordneten Werte sind dann Zahlen vom Format 10,992312434.
Das Ganze würde ich dann gerne so ausgeben:
Zahl, Key
Also das ist vielleicht eine Lösung für eine Consolenausgabe aber wenn man eh eine Gui hat würde ich doch ein ListCtrl verwenden was in einem eigenen Kleinen Dialog eingebaut ist.
Ja, deshalb hatte ich auch gehofft, dass mir jemand nen Tipp geben kann, wie ich das Ganze mit geringem Aufwand ordentlich ausgeben kann.

Verfasst: Mittwoch 23. Januar 2008, 14:04
von EyDu
Die ganzen str-Aufrufe vor der Formatierung sind vollkommen überflüssig, das wird automatisch erledigt:

Code: Alles auswählen

ele = "%s\t\t%s\t%s" % (element[0], element[1][0], element[1][1])

Verfasst: Mittwoch 23. Januar 2008, 16:46
von tomate

Code: Alles auswählen

list = wx.ListCtrl(self, -1, style = wx.LC_REPORT)
list.InsertColumn(0, "Key") 
list.InsertColumn(1, "Wer")


for key in my_dic:
    list.InsertStringItem(index, 0, str(key))
    list.InsertStringItem(index, 1, str(my_dic[key]))
Leider ist mir nicht klar, was als "index" parameter erwartet wird. Kann mir da jemand weiterhelfen?

Verfasst: Mittwoch 23. Januar 2008, 20:22
von tomate
Es wäre super wenn mir irgendjemand helfen könnte. Oder vielleicht einen guten Link mit einem Beispiel kennt.

Verfasst: Donnerstag 24. Januar 2008, 06:26
von Zap
Guten Morgen, vielleicht hilft dir ja dieses Example. Habe leider gerade nicht mehr Zeit um zu helfen.

Code: Alles auswählen

import wx
import sys, glob, random
import data

class DemoFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1,
                          "wx.ListCtrl in wx.LC_REPORT mode",
                          size=(600,400))

        il = wx.ImageList(16,16, True)
        for name in glob.glob("smicon??.png"):
            bmp = wx.Bitmap(name, wx.BITMAP_TYPE_PNG)
            il_max = il.Add(bmp)
        self.list = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
        self.list.AssignImageList(il, wx.IMAGE_LIST_SMALL)

        # Add some columns
        for col, text in enumerate(data.columns):
            self.list.InsertColumn(col, text)

        # add the rows
        for item in data.rows:
            index = self.list.InsertStringItem(sys.maxint, item[0])
            for col, text in enumerate(item[1:]):
                self.list.SetStringItem(index, col+1, text)

            # give each item a random image
            img = random.randint(0, il_max)
            self.list.SetItemImage(index, img, img)
                
        # set the width of the columns in various ways
        self.list.SetColumnWidth(0, 120)
        self.list.SetColumnWidth(1, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(2, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(3, wx.LIST_AUTOSIZE_USEHEADER)


app = wx.PySimpleApp()
frame = DemoFrame()
frame.Show()
app.MainLoop()

Verfasst: Donnerstag 24. Januar 2008, 09:41
von tomate
Danke für das Beispiel!
Leider verstehe ich immer noch nicht was "index". Ich lass die Ausgabe jetzt einfach so

Verfasst: Donnerstag 24. Januar 2008, 11:19
von Jan-Peer
Hallo,

In Zeile 24 wird mit der Methode InsertStringItem eine neue Zeile angelegt und die erste Spalte befüllt. Diese Methode liefert den Index der neuen Zeile im ListCtrl (~Zeilennummer) zurück. Diesen Index brauchst du dann, wenn du weitere Spalten in dieser neuen Zeile füllen willst (mittels SetStringItem).

Hoffentlich ist es jetzt ein bisschen klarer

Verfasst: Freitag 25. Januar 2008, 12:29
von tomate
Ja, besten Dank!