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
Text der Fenstergröße anpassen
danke
Es handelt sich um einen StaticText..
Es handelt sich um einen StaticText..
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ß!
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()