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!