Seite 1 von 1

Text der Fenstergröße anpassen

Verfasst: Montag 29. August 2011, 09:29
von akhof
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

Re: Text der Fenstergröße anpassen

Verfasst: Montag 29. August 2011, 13:33
von C4S3
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

Re: Text der Fenstergröße anpassen

Verfasst: Montag 29. August 2011, 15:14
von akhof
danke :D :D :D

Es handelt sich um einen StaticText..

Re: Text der Fenstergröße anpassen

Verfasst: Montag 29. August 2011, 21:39
von C4S3
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.

Re: Text der Fenstergröße anpassen

Verfasst: Samstag 24. Dezember 2011, 10:28
von Gremlin
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()