Text der Fenstergröße anpassen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Hi!
Ich hab mal eine Frage.
Ich arbeite gerade an einem Projekt, und habe in meinem Fenster ein beliebig langen Text.
Man muss das Fenster vergrößern und verkleinern können, wobei sich der Text anpassen soll (sozusagen automatische Zeilenumbrüche).
Leider habe ich keine Idee, wie ich das anstellen könnte.

Ich habe auch schon im Internet danach gesucht, finde aber leider keine richtige Antwort.
Auch ein Problem ist, dass ich nichteinmal richtig weiß, wie ich meine "Frage" bei Google formulieren soll?!

Vielen Dank für Eure Hilfe schoneinmal im Vorraus!!

akhof
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Hi,

Stichworte: MultiLine, Linewrap, Wordwrap.
Wenn es sich um ein wxTextCtrl handelt kannst du folgende Flags bei 'style' benutzen:
wx.TE_MULTILINE | wx.TE_WORDWRAP | wx.TE_WRAP
Gruß!
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

danke :D :D :D

Es handelt sich um einen StaticText..
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Hm, StaticText "kann" mehrzeiligen Text darstellen. Aber in dem Fall erscheint mir das mit dem Wortumbruch/Zeilenumbruch etwas mühsam. Ich würde das wx.TextCtrl nehmen und auf "readonly" setzen.
Gruß!
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Das sollte helfen :)

Code: Alles auswählen

import wx
from wx.lib.wordwrap import wordwrap

class MainFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        
        panel = wx.Panel(self)
        self.text = wx.StaticText(panel, label='teeeest '*99)
        
        self.Bind(wx.EVT_SIZE, self.on_resize)
        
        panel_sizer = wx.BoxSizer()
        panel_sizer.Add(panel, 1, wx.EXPAND)
        text_sizer = wx.BoxSizer()
        text_sizer.Add(self.text, 1, wx.EXPAND|wx.ALL, 10)
        
        self.SetSizer(panel_sizer)
        self.Layout()
    
    def on_resize(self, event):
        # Damit wordwrap gute Ergebnisse liefert, braucht es Informationen
        # ueber die verwendete Schriftart und -groesse
        default_dc = wx.ClientDC(self)
        default_dc.SetFont(self.text.GetFont())
        
        # -20 deshalb, weil das widget einen rechten und linken
        # Rand von jeweils 10 pixel hat
        label_max_width = self.GetSizeTuple()[0] - 20
        
        label = self.text.GetLabel().replace('\n', '')
        self.text.SetLabel(wordwrap(label, label_max_width, default_dc))
        
        default_dc.Destroy()
        self.Layout()
        event.Skip()

if __name__ == '__main__':
    app = wx.PySimpleApp()
    MainFrame(None).Show()
    app.MainLoop()
Antworten