Multiline Texte in wxGrid

Plattformunabhängige GUIs mit wxWidgets.
Antworten
sacro_thaan
User
Beiträge: 12
Registriert: Montag 23. Januar 2006, 03:21

Donnerstag 27. April 2006, 01:56

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 27. April 2006, 12:42

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sacro_thaan
User
Beiträge: 12
Registriert: Montag 23. Januar 2006, 03:21

Donnerstag 27. April 2006, 14:29

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Donnerstag 27. April 2006, 16:11

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?
sacro_thaan
User
Beiträge: 12
Registriert: Montag 23. Januar 2006, 03:21

Donnerstag 27. April 2006, 17:01

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Freitag 28. April 2006, 08:14

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)
:)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 2. Mai 2006, 14:35

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Dienstag 2. Mai 2006, 14:57

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