multiline in listctrl

Plattformunabhängige GUIs mit wxWidgets.
Antworten
gangsterchen
User
Beiträge: 7
Registriert: Donnerstag 6. August 2009, 10:11

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Hast Du Dir einmal in der wxPython-Demo die Beispiele zu Grid angeschaut?
MfG
HWK
gangsterchen
User
Beiträge: 7
Registriert: Donnerstag 6. August 2009, 10:11

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?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
gangsterchen
User
Beiträge: 7
Registriert: Donnerstag 6. August 2009, 10:11

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...
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Rebecca hat geschrieben:SetColLabelSize(0), SetRowLabelSize(0)
Gut zu wissen.
MfG
HWK
gangsterchen
User
Beiträge: 7
Registriert: Donnerstag 6. August 2009, 10:11

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?
Zuletzt geändert von gangsterchen am Freitag 7. August 2009, 13:18, insgesamt 1-mal geändert.
Benutzeravatar
Mawilo
User
Beiträge: 454
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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
gangsterchen
User
Beiträge: 7
Registriert: Donnerstag 6. August 2009, 10:11

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...
Benutzeravatar
Mawilo
User
Beiträge: 454
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

gangsterchen hat geschrieben:habt ihr evtl auch was um die lines zwischen spalten und zeilen auszublenden?

Code: Alles auswählen

EnableGridLines(False)
MfG
HWK
gangsterchen
User
Beiträge: 7
Registriert: Donnerstag 6. August 2009, 10:11

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?
Antworten