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
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()