Hey Leute!
Ich habe da mal eine Frage, und zwar
möchte ich den Inhalt einer verschachtelten Liste
in einer WX-Gui ausgeben, z.B.
[[wert1,wert2,wert3],[wert1,wert2,wert3],[wert1,wert2,wert3]]
Dies soll möglichst so ähnlich aussehen und anklickbar(also bei Klick Methode aufrufen) sein:
wie heißt denn das dazugehörige WX-Element? ich werde aus der Doku nicht ganz schlau...
...und schonmal danke für eure Mühen...
Auflistung
Python-Version: 2.5
- DatenMetzgerX
- User
- Beiträge: 398
- Registriert: Freitag 28. April 2006, 06:28
- Wohnort: Zürich Seebach (CH)
wx.gizmos.TreeListCtrl
Danke für die schnelle Hilfe!
Allerdings weiß ich nicht, wie ich an dieses Element rankomme...
ich habs mit wx.TreeCtrl probiert, aber das sieht so aus:
ich hätte es aber lieber so::lol:
Ich kann in der Referenz nichts mit wx.gizmo finden, kann mir da bitte jemand helfen
Allerdings weiß ich nicht, wie ich an dieses Element rankomme...
ich habs mit wx.TreeCtrl probiert, aber das sieht so aus:
ich hätte es aber lieber so::lol:
Ich kann in der Referenz nichts mit wx.gizmo finden, kann mir da bitte jemand helfen
Python-Version: 2.5
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Spaten!Spaten hat geschrieben:wie heißt denn das dazugehörige WX-Element? ich werde aus der Doku nicht ganz schlau...
Dazu brauchst du das "ListCtrl".
Wenn ich nicht weiß, was ich verwenden soll, dann sehe ich mir die wxPython-Demo durch. Dann finde ich immer ein passendes Widget.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Du kannst das Beispiel von meinen beiden Posts in einem früheren Beitrag nehmen.
VirtualListCtrl vom ersten Beitrag und DataSource vom zweiten.
Auf einen Klick kannst du einfach beim init der Liste noch ein Bind mit dem richtigen Event machen.
Gruss
*edit* eigentlich könnt ich ja das bsp schnell reinkopieren
Kannst das einfach mal austesten
Du kannst das Beispiel von meinen beiden Posts in einem früheren Beitrag nehmen.
VirtualListCtrl vom ersten Beitrag und DataSource vom zweiten.
Auf einen Klick kannst du einfach beim init der Liste noch ein Bind mit dem richtigen Event machen.
Gruss
*edit* eigentlich könnt ich ja das bsp schnell reinkopieren
Kannst das einfach mal austesten
Code: Alles auswählen
import wx
import sys, glob, random
import data
class DataSource:
def __init__(self):
self.data = [(str(x),str(x),'test','noch mehr eintraege') for x in xrange(10000)]
def GetColumnHeaders(self):
return ['x','y','teststring','str']
def GetCount(self):
return len(self.data)
def GetItem(self, index):
return self.data[index]
def UpdateCache(self, start, end):
pass
class VirtualListCtrl(wx.ListCtrl):
def __init__(self, parent, dataSource):
wx.ListCtrl.__init__(self, parent, \
style=wx.LC_REPORT|wx.LC_SINGLE_SEL|wx.LC_VIRTUAL)
self.dataSource = dataSource
self.Bind(wx.EVT_LIST_CACHE_HINT, self.DoCacheItems)
self.SetItemCount(dataSource.GetCount())
columns = dataSource.GetColumnHeaders()
for col, text in enumerate(columns):
self.InsertColumn(col, text)
def DoCacheItems(self, evt):
self.dataSource.UpdateCache(evt.GetCacheFrom(), evt.GetCacheTo())
def OnGetItemText(self, item, col):
data = self.dataSource.GetItem(item)
return data[col]
def OnGetItemAttr(self, item):
return None
def OnGetItemImage(self, item):
return -1
class DemoFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Virtual wx.ListCtrl", size=(600,400))
self.list = VirtualListCtrl(self, DataSource())
app = wx.PySimpleApp()
frame = DemoFrame()
frame.Show()
app.MainLoop()
Ah danke Leute ich habs hinbekommen!
freu mir echt n Keks
So hab ichs gemacht:
hab aber nochmal ne kleine Frage:
(is zwar nciht ganz so wichtig, aber..)
Kann man die Hintergrundfarbe von wx.Frames und wx.Buttons
ändern? dass ise nicht mehr grau, sondern Schwarz mit weißer oder roter
Schrift sind?
wär cool
freu mir echt n Keks
So hab ichs gemacht:
Code: Alles auswählen
import wx.gizmos as gizmos # für die Playlist
....
self.playlist = gizmos.TreeListCtrl(self,-1,(0,300),(1024,250))
self.playlist.AddColumn("Titel")
self.playlist.AddColumn("Interpret")
self.playlist.AddColumn("Album")
self.playlist.AddColumn("Genre")
self.playlist.AddColumn("Dauer")
self.playlist.AddColumn("Dateiname")
(is zwar nciht ganz so wichtig, aber..)
Kann man die Hintergrundfarbe von wx.Frames und wx.Buttons
ändern? dass ise nicht mehr grau, sondern Schwarz mit weißer oder roter
Schrift sind?
wär cool
Python-Version: 2.5
- DatenMetzgerX
- User
- Beiträge: 398
- Registriert: Freitag 28. April 2006, 06:28
- Wohnort: Zürich Seebach (CH)
Code: Alles auswählen
In [1]: import wx
In [2]: app = wx.PySimpleApp()
In [3]: frame = wx.Frame(None)
In [4]: frame.SetBackgroundColour("Black")
Out[4]: True
In [5]: frame.Show()
Out[5]: True
In [6]: app.MainLoop()
Edit... Jop geht...
Code: Alles auswählen
In [1]: import wx
In [2]: app = wx.PySimpleApp()
In [3]: frame = wx.Frame(None)
In [4]: panel = wx.Panel(frame)
In [5]: button = wx.Button(panel)
In [6]: button.SetBackgroundColour("red")
Out[6]: True
In [7]: frame.Show()
Out[7]: True
In [8]: app.MainLoop()
oh cool danke!
Kann man auch die Schriftfarbe auf den Buttons ändern?
Kann man auch die Schriftfarbe auf den Buttons ändern?
Python-Version: 2.5
- DatenMetzgerX
- User
- Beiträge: 398
- Registriert: Freitag 28. April 2006, 06:28
- Wohnort: Zürich Seebach (CH)
ah cool das wurde ja sogar gelöst...
jetzt hab ich aber nochmal ne allerletzte Frage:
(echt die letzte zu diesem Thema, versprochen)
und zwar hab ich jetzt die TreeListCtrl mit Columns gefüllt
möchte aber nun Listeneinträge hunzufügen, werde aus der Doku aber
wiedemal nicht schlau. Kann mir da jemand helfen?
jetzt hab ich aber nochmal ne allerletzte Frage:
(echt die letzte zu diesem Thema, versprochen)
und zwar hab ich jetzt die TreeListCtrl mit Columns gefüllt
möchte aber nun Listeneinträge hunzufügen, werde aus der Doku aber
wiedemal nicht schlau. Kann mir da jemand helfen?
Code: Alles auswählen
self.playlist = gizmos.TreeListCtrl(self,-1,(0,300),(1024,250))
self.playlist.AddColumn("Titel")
self.playlist.AddColumn("Interpret")
self.playlist.AddColumn("Album")
Python-Version: 2.5
mit InsertItem oder AppendItem.Spaten hat geschrieben:ah cool das wurde ja sogar gelöst...
jetzt hab ich aber nochmal ne allerletzte Frage:
(echt die letzte zu diesem Thema, versprochen)
und zwar hab ich jetzt die TreeListCtrl mit Columns gefüllt
möchte aber nun Listeneinträge hunzufügen, werde aus der Doku aber
wiedemal nicht schlau. Kann mir da jemand helfen?Code: Alles auswählen
self.playlist = gizmos.TreeListCtrl(self,-1,(0,300),(1024,250)) self.playlist.AddColumn("Titel") self.playlist.AddColumn("Interpret") self.playlist.AddColumn("Album")
Im Demo sieht man ein schönes Sample.
Kannst ruhig noch mehr fragen, Platz ist genug hier.
Halli Hallo, ich hatte zu genau zu diesem Thema mal ein kleines
Projekt. Hier mal der Code mit ein paar Kommentaren.
Ein Gemisch aus eigenem Code und der WX Demo die nicht
alle Infos bot, die ich brauchte.
Was zeigt das Script?
Eine ListCtrl das auf einem Panel liegt. DIeses liegt auf einem Frame.
Die ListCtrl bekommt in 2 Spalten einträge. Diese lassen sich
beide ordnen. Es gibt eine Farbunterscheidung und das Ändern der Größe
der Spalten wird unterbunden. Klick, Doppelklick und Rechtsklick
Events werden abgefangen.
Gruss prosta
Projekt. Hier mal der Code mit ein paar Kommentaren.
Ein Gemisch aus eigenem Code und der WX Demo die nicht
alle Infos bot, die ich brauchte.
Was zeigt das Script?
Eine ListCtrl das auf einem Panel liegt. DIeses liegt auf einem Frame.
Die ListCtrl bekommt in 2 Spalten einträge. Diese lassen sich
beide ordnen. Es gibt eine Farbunterscheidung und das Ändern der Größe
der Spalten wird unterbunden. Klick, Doppelklick und Rechtsklick
Events werden abgefangen.
Code: Alles auswählen
import wx, sys
import wx.lib.mixins.listctrl as listmix
ID_LISTCTRL = wx.NewId()
musicdata = {
1 : ("Bad English", "The Price Of Love", "Rock"),
2 : ("DNA featuring Suzanne Vega", "Tom's Diner", "Rock"),
3 : ("George Michael", "Praying For Time", "Rock"),
4 : ("Gloria Estefan", "Here We Are", "Rock"),
5 : ("Linda Ronstadt", "Don't Know Much", "Rock"),
6 : ("Michael Bolton", "How Am I Supposed To Live Without You", "Blues"),
7 : ("Paul Young", "Oh Girl", "Rock"),
8 : ("Paula Abdul", "Opposites Attract", "Rock"),
9 : ("Richard Marx", "Should've Known Better", "Rock"),
}
class Gui(wx.Frame, listmix.ColumnSorterMixin):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Test', (300,300), (240, 300), style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
panel = wx.Panel(self, -1)
# Online/Offline Dictionary
self.operations = {}
#Aufruf der ListCtrl Klasse
#zum Darstellen der Friendsliste
self.list = TestListCtrl(panel, ID_LISTCTRL, style=wx.LC_REPORT #| wx.BORDER_SUNKEN
| wx.BORDER_NONE #| wx.LC_EDIT_LABELS
| wx.LC_VRULES #| wx.LC_SORT_ASCENDING
| wx.LC_HRULES | wx.LC_SINGLE_SEL
)
self.itemDataMap = {}
listmix.ColumnSorterMixin.__init__(self, 3)
#Benennung der Header
self.list.InsertColumn(0, "Spalte 1")
self.list.InsertColumn(1, "Spalte 2")
self.list.SetColumnWidth(0, 170)
self.list.SetColumnWidth(1, 48)
self.column = -1
#Bindings
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.item_select, id=ID_LISTCTRL)
self.Bind(wx.EVT_LIST_COL_BEGIN_DRAG, self.column_drag, id=ID_LISTCTRL)
self.Bind(wx.EVT_LIST_COL_CLICK, self.column_click, id=ID_LISTCTRL)
self.list.Bind(wx.EVT_LEFT_DCLICK, self.on_double_click)
self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.on_right_click)
self.insertUsersIntoListCtrl()
def insertUsersIntoListCtrl(self):
#Daten in die ListCtrl einfuegen
items = musicdata.items()
for key, data in items:
index = self.list.InsertImageStringItem(sys.maxint, data[0], 0)
self.list.SetStringItem(index, 1, data[1])
self.list.SetItemData(index, key)
#Farbunterscheidung von Eintraegen
length = self.list.GetItemCount()
for x in range(length):
if self.list.GetItem(x, 1).GetText() == "BLAU":
self.list.SetItemTextColour(x, wx.BLUE)
else:
self.list.SetItemTextColour(x, wx.RED)
#Methoden zum Ordnen der ListCtrl
def column_click(self, event):
lastColumn = self.column
self.column = event.m_col
if self.column == lastColumn:
temp = self.lower
self.lower = self.higher
self.higher = temp
else:
self.lower = -1
self.higher = 1
self.list.SortItems(self.column_sorter)
def column_sorter(self, key1, key2):
data1 = musicdata[key1]
data2 = musicdata[key2]
if data1 == data2:
return 0
elif data1 < data2:
return self.lower
else:
return self.higher
#Pflichtmethode der ColumnSorterMixin Klasse
def GetListCtrl(self):
return self
#Methoden der Click Events
def item_select(self, event):
self.currentItem = event.m_itemIndex
print "Ausgewaehlt wurde Eintrag Nummer " + str(self.currentItem) + \
" mit dem Inhalt " + self.list.GetItem(self.currentItem, 0).GetText()
def on_double_click(self, event):
print "DOPPELKLICK"
def on_right_click(self, event):
print "Rechtsklick"
#Verhindert das Veraendern der Groesse der Spalten
def column_drag(self, event):
print "Es wird versucht, die Groesse der Spalten \
zu aendern... Event kann mit event.Veto() fuer \
die jeweilige Spalte abgefangen werden"
if event.GetColumn() == 0 or event.GetColumn() == 1:
event.Veto()
class TestListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
def __init__(self, parent, ID, pos=(0,0), size=(234,300), style=0):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
listmix.ListCtrlAutoWidthMixin.__init__(self)
class TestClass(wx.App):
def OnInit(self):
gui = Gui()
gui.Show()
return True
if (__name__ == '__main__'):
app = TestClass(False)
app.MainLoop()
ah wie cool! Danke:D werds mir ansehen
vielen Dank!!!
vielen Dank!!!
Python-Version: 2.5
- DatenMetzgerX
- User
- Beiträge: 398
- Registriert: Freitag 28. April 2006, 06:28
- Wohnort: Zürich Seebach (CH)
Beim treelistctrl musst du aber noch die main column setzen bevor du items hinzufügen kannst (+ root item)Spaten hat geschrieben:ah cool das wurde ja sogar gelöst...
jetzt hab ich aber nochmal ne allerletzte Frage:
(echt die letzte zu diesem Thema, versprochen)
und zwar hab ich jetzt die TreeListCtrl mit Columns gefüllt
möchte aber nun Listeneinträge hunzufügen, werde aus der Doku aber
wiedemal nicht schlau. Kann mir da jemand helfen?Code: Alles auswählen
self.playlist = gizmos.TreeListCtrl(self,-1,(0,300),(1024,250)) self.playlist.AddColumn("Titel") self.playlist.AddColumn("Interpret") self.playlist.AddColumn("Album")
Code: Alles auswählen
self.AddColumn(_("Konto"))
self.SetColumnWidth(0, 150)
i = 1
for month in data.MonthList():
self.AddColumn(month)
self.SetColumnAlignment(i, 1)
self.SetColumnWidth(i, 75)
i+=1
self.SetMainColumn(0) #Maincolumn setzen (in welcher der tree ist)
self.root = self.AddRoot(_("Konten")) #Rootitem hinzufügen
item = self.AppendItem(parent, k.get_name()) #Einzelnes Element hinzufügen