Seite 1 von 1
multiline in listctrl
Verfasst: Donnerstag 6. August 2009, 13:49
von gangsterchen
Hi,
leider, ich möchte gerne in einer column einer listctrl zeilenschaltungen ala \n einfügen. Allerdings scheint das ja nicht zu gehen. Ok, kann ich dann irgendwie ein textctrl in eine column einfügen?
es kann doch nicht sein, das ich keine tabelle erstellen kann (es muss eine tabelle sein) in der ich in eine spalte mehrere zeilen schreiben kann.
oder ich seh den wald vor lauter bäumen nicht. ich möchte content irgendwie sauber strukturiert wieder geben, also links ein bild, rechts ein text und immer dynamisch aller 5 minuten welche hinterher. Was soll ich dafür nehmen außer listctrl, bzw wie bekomm ich zeilenumbrüche in listctrl?
danke schonmal für eure hilfe
Verfasst: Donnerstag 6. August 2009, 13:59
von HWK
Hast Du Dir einmal in der wxPython-Demo die Beispiele zu Grid angeschaut?
MfG
HWK
Verfasst: Donnerstag 6. August 2009, 15:17
von gangsterchen
ja, wobei ich finde das grid eher für eingaben durch den user gedacht ist als für mich als listctrl, oder kann ich das auch auf readonly und ohne zeilen und spalten bezifferung ausgeben?
Verfasst: Donnerstag 6. August 2009, 15:46
von HWK
Du kannst Editieren des gesamten Grids oder einzelner Zellen mit EnableEditing(False) bzw. SetReadOnly(x, y, isReadOnly=True) abschalten. Die Zeilen- und Spaltenbeschriftung kann man aber m.E. nicht komplett unterdrücken. Evtl. wäre noch der Grid-Sizer etwas für Dich.
MfG
HWK
Verfasst: Freitag 7. August 2009, 08:59
von gangsterchen
hm, gestern bin ich leider etwas verzweifelt. Ich habe stunden auf arbeit unter Linux mit wxPython programmiert und war schon fast am ziel. Komm nachhause und will es auf meinem Mac starten und nix geht. Heute werde ich mir mal noch das Grid thema genauer ansehen, wenn das auch wieder nicht klappt, werde ich auf eine reine consolen anwendung umsteigen und nur growl zur darstellung benutzen...
Verfasst: Freitag 7. August 2009, 09:53
von Rebecca
HWK hat geschrieben:Die Zeilen- und Spaltenbeschriftung kann man aber m.E. nicht komplett unterdrücken.
Kann man. Hab dies hier in meinem Code gefunden:
SetColLabelSize(0), SetRowLabelSize(0)
Ohne Gewaehr, kann den Code gerade nicht testen. Im Allgemeinen gibt es wohl nichts, was man mit einem Grid nicht machen kann.
Verfasst: Freitag 7. August 2009, 11:22
von HWK
Rebecca hat geschrieben:SetColLabelSize(0), SetRowLabelSize(0)
Gut zu wissen.
MfG
HWK
Verfasst: Freitag 7. August 2009, 12:46
von gangsterchen
na das klingt ja immer besser, dann werde ich mich doch gleich mal dran machen
edit:
also die optionen kann ich schonmal bestätigen, das funktioniert.
habt ihr evtl auch was um die lines zwischen spalten und zeilen auszublenden?
Verfasst: Freitag 7. August 2009, 12:56
von Mawilo
Evtl solltest Du dir auch mal wx.VListBox und wx.HtmlListBox anschauen. Damit kann man mehrzeilige Einträge in einer Listbox realisieren.
Grüße
Mawilo
Verfasst: Freitag 7. August 2009, 13:23
von gangsterchen
hm, grid fällt wohl raus. So wie ich das sehe, kann ich sie nicht dynamisch erweitern. ich muss vorher festlegen wie groß sie ist...
schade, sah vielversprechend aus.
auf zu vlistbox und htmllistbox
bzw ich les mich grad durchs MEGAGrid sample und dort siehts so aus als wäre es möglich columns dynamisch einzuführen, sieht aber bis jetzt noch total kompliziert aus...
Verfasst: Freitag 7. August 2009, 14:24
von Mawilo
Hier ein kleines Beispiel aus einem Programm von mir. Über ein Popup-Menü werden da Zeilen zugefügt oder entfernt. Vieleicht hilft es Dir.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
import wx.grid
class Beispiel(wx.Frame):
def __init__(self, title, pos, size):
wx.Frame.__init__(self, None, -1, title, pos, size)
panel = wx.Panel(self, -1)
grid = wx.grid.Grid(panel, size=(400,400))
grid.CreateGrid(5, 3)
colLabels = ['Spalte 1', 'Spalte 2', 'Spalte 3']
for idx, name in enumerate(colLabels):
grid.SetColLabelValue(idx, colLabels[idx])
grid.SetDefaultCellAlignment(wx.CENTRE, wx.CENTRE)
grid.SetColSize(0, 80)
grid.SetColSize(1, 100)
grid.SetColSize(2, 80)
for idx in xrange(5):
grid.SetCellValue(idx, 0, str(idx))
grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, GridPopup)
class GridPopup(wx.Panel):
def __init__(self, event):
grid = event.GetEventObject()
parent = grid.GetParent()
wx.Panel.__init__(self, parent)
self.pos = event.GetRow()
self.grid = grid
popupID1 = wx.NewId()
popupID2 = wx.NewId()
popupID3 = wx.NewId()
menu = wx.Menu()
menu.Append(popupID1, 'Add Row before')
menu.Append(popupID2, 'Add Row after')
menu.AppendSeparator()
menu.Append(popupID3, 'Delete row')
self.Bind(wx.EVT_MENU, self.setNewRowBefore, id=popupID1)
self.Bind(wx.EVT_MENU, self.setNewRowAfter, id=popupID2)
self.Bind(wx.EVT_MENU, self.deleteRow, id=popupID3)
self.PopupMenu(menu)
menu.Destroy()
def setNewRowBefore(self, event):
pos = self.pos
self.grid.InsertRows(pos=pos, numRows=1)
def setNewRowAfter(self, event):
pos = self.pos + 1
self.grid.InsertRows(pos=pos, numRows=1)
def deleteRow(self, event):
pos = self.pos
self.grid.DeleteRows(pos=pos, numRows=1)
if __name__ == '__main__':
app = wx.PySimpleApp()
title = '**---Test---**'
pos = (200, 200)
size = (500, 450)
frame = Beispiel(title, pos, size)
frame.Show()
app.MainLoop()
Grüße
Mawilo
Verfasst: Freitag 7. August 2009, 14:44
von HWK
gangsterchen hat geschrieben:habt ihr evtl auch was um die lines zwischen spalten und zeilen auszublenden?
MfG
HWK
Verfasst: Montag 10. August 2009, 11:39
von gangsterchen
Hi,
ja mit dem beispiel kann ich super was anfangen, jetzt war ich schon kurz davor auf qt zu wechseln, aber so klappt das prächtig.
dankeschön
edit:
jetzt brauch ich nur noch eine kleinigkeit, ich werde zwar die demo paralell nochmal durchschauen, hab aber bis jetzt nicht wirklich was gefunden.
Ich möchte das das programm nur oben in der statusleiste, und nicht in der normalen taskleiste angezeigt wird, und bei einem klick auf das statusicon verschwindet oder auftaucht, ist das mit wx möglich?