Seite 1 von 1

Multiline Texte in wxGrid

Verfasst: Donnerstag 27. April 2006, 01:56
von sacro_thaan
Hallo liebe Gemeinde,

ich habe mal wieder eine Frage. Und zwar war ich auf der Suche nach einer Möglichkeit, mehrzeiligen Text in einer Tabelle (wxGrid) anzuzeigen. Leider wird der Text nur einzeilig dargestellt, was zu sehr langen zeilen führt.

Wenn jemand einen Tipp hat, dann bitte posten.

Danke und Gruß

Till

Re: Multiline Texte in wxGrid

Verfasst: Donnerstag 27. April 2006, 12:42
von gerold
sacro_thaan hat geschrieben:mehrzeiligen Text in einer Tabelle (wxGrid)
Hi Till!

Suche in der wxPython-Demo nach "GridStdEdRend.py". Dort werden Umbrüche verwendet. Allerdings keine automatischen.

lg
Gerold
:-)

Verfasst: Donnerstag 27. April 2006, 14:29
von sacro_thaan
Hi Gerold,

die Demo hatte ich mir schon angesehen, allerdings bräuchte ich in der Tat automatische Umbrüche, wie in einem Multiline TextCtrl.

Trotzdem Danke!

Gruß

Till

Re: Multiline Texte in wxGrid

Verfasst: Donnerstag 27. April 2006, 16:11
von Francesco
sacro_thaan hat geschrieben:Hi Gerold,

die Demo hatte ich mir schon angesehen, allerdings bräuchte ich in der Tat automatische Umbrüche, wie in einem Multiline TextCtrl.

Trotzdem Danke!

Gruß

Till
Hi Till,

ich "fürchte" fast, dass du das selber implementieren muesstest.
Entweder die Strings vorformatieren (Zeilenumbrüche einfügen).

Da muesstest du irgendwie die durchschnittliche Zeichenbreite und
die Spaltenbreite herausbekommen, und an geeigneten Wortgrenzen
dann die Zeilenumbrüche einfügen.

Wie wärs, wenn du die grid Klasse ableiten würdest, und das SetCellValue
überschreibst?

Re: Multiline Texte in wxGrid

Verfasst: Donnerstag 27. April 2006, 17:01
von sacro_thaan
Francesco hat geschrieben: ich "fürchte" fast, dass du das selber implementieren muesstest.
Entweder die Strings vorformatieren (Zeilenumbrüche einfügen).

Da muesstest du irgendwie die durchschnittliche Zeichenbreite und
die Spaltenbreite herausbekommen, und an geeigneten Wortgrenzen
dann die Zeilenumbrüche einfügen.

Wie wärs, wenn du die grid Klasse ableiten würdest, und das SetCellValue
überschreibst?
Hi Francesco,

eine "schnelle" Lösung scheint also nicht zu existieren :( . Da ich doch sehr unter Zeitdruck stehe, werde ich das erstmal so lassen, und falls ich doch noch Zeit haben sollte mich mal dransetzen.

Gruß

Till

Re: Multiline Texte in wxGrid

Verfasst: Freitag 28. April 2006, 08:14
von Francesco
sacro_thaan hat geschrieben:
Hi Francesco,

eine "schnelle" Lösung scheint also nicht zu existieren :( . Da ich doch sehr unter Zeitdruck stehe, werde ich das erstmal so lassen, und falls ich doch noch Zeit haben sollte mich mal dransetzen.

Gruß

Till
Hi Till,

wenn Du sowieso öfters was mit wxPython machst, und noch dazu
unter Zeitdruck stehst, würde ich mich bei der Mailing Liste anmelden
und dort direkt nochmals "die Experten" fragen.

Ich bin mir nicht 100% sicher, ob das nicht doch geht.
Wenn nicht, könnte man ja einen "Feature Request" für wxWidgets machen, das dann in einer späteren Version über eine wxPython Schnittstelle aufgerufen werden kann.

Vielleicht in etwa:

SetCellValue(self, int row, int col, String s, style=wx.AUTO_LINE_BREAK)
:)

Verfasst: Dienstag 2. Mai 2006, 14:35
von gerold
Hi Till!

Ich habe da etwas interessantes :P

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import wx
import wx.grid


class MyFrame(wx.Frame):
    def __init__(self, parent = None):
        wx.Frame.__init__(
            self, 
            parent, 
            -1, 
            "Grid-Test", 
            size = wx.Size(600, 400),
        )
        grid = wx.grid.Grid(self)
        grid.CreateGrid(3, 3)
        grid.SetDefaultRenderer(wx.grid.GridCellAutoWrapStringRenderer())
        
        for row in range(3):
            for col in range(3):
                grid.SetCellValue(
                    row, 
                    col, 
                    "Hallo du schöne Welt. Wir sind gekommen um zu bleiben."
                )
            grid.SetRowSize(row, 60)
        for col in range(3):
            grid.SetColSize(col, 120)


if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Center()
    frame.Show()
    app.MainLoop()
Man achte ganz besonders auf wx.grid.GridCellAutoWrapStringRenderer().

lg
Gerold
:-)

Verfasst: Dienstag 2. Mai 2006, 14:57
von Francesco
gerold hat geschrieben:Hi Till!
Man achte ganz besonders auf wx.grid.GridCellAutoWrapStringRenderer().

lg
Gerold
:-)
Hi Gerold,

cool, ich nehme das zurück, was ich vorher am Anfang im Thread geschrieben habe.

Löschen oder editieren tu ichs aber nicht, damit der Zusammenhang bestehen bleibt.