Hilfe für ListCtrl

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

Dienstag 22. Januar 2008, 21:44

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

Mittwoch 23. Januar 2008, 10:18

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

Mittwoch 23. Januar 2008, 10:36

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

Mittwoch 23. Januar 2008, 11:59

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: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 23. Januar 2008, 14:04

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

Mittwoch 23. Januar 2008, 16:46

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

Mittwoch 23. Januar 2008, 20:22

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

Donnerstag 24. Januar 2008, 06:26

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

Donnerstag 24. Januar 2008, 09:41

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

Donnerstag 24. Januar 2008, 11:19

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

Freitag 25. Januar 2008, 12:29

Ja, besten Dank!
Antworten