Hilfe für ListCtrl

Plattformunabhängige GUIs mit wxWidgets.
Antworten
tomate
User
Beiträge: 48
Registriert: Sonntag 5. August 2007, 12:07

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
Zuletzt geändert von tomate am Mittwoch 23. Januar 2008, 21:11, insgesamt 1-mal geändert.
hmueller
User
Beiträge: 39
Registriert: Montag 27. November 2006, 16:07
Wohnort: Linz, Oberösterreich

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]))
I must not fear. Fear is the mind-killer. Fear is the little death that brings total obliteration.
I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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.
tomate
User
Beiträge: 48
Registriert: Sonntag 5. August 2007, 12:07

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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])
tomate
User
Beiträge: 48
Registriert: Sonntag 5. August 2007, 12:07

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?
tomate
User
Beiträge: 48
Registriert: Sonntag 5. August 2007, 12:07

Es wäre super wenn mir irgendjemand helfen könnte. Oder vielleicht einen guten Link mit einem Beispiel kennt.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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()
tomate
User
Beiträge: 48
Registriert: Sonntag 5. August 2007, 12:07

Danke für das Beispiel!
Leider verstehe ich immer noch nicht was "index". Ich lass die Ausgabe jetzt einfach so
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

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
tomate
User
Beiträge: 48
Registriert: Sonntag 5. August 2007, 12:07

Ja, besten Dank!
Antworten