Я пытаюсь создать объект wx.Panel, содержащий несколько абзацев с индивидуально обернутым текстом.Когда родительская панель становится слишком маленькой, абзацы перекрываются и скрывают части текста.
Как создать панель с текущим текстом, который не будет скрыт другими объектами при изменении размера фрейма?Я хочу, чтобы каждый абзац красиво отображался при изменении размера окна;однако я не хочу, чтобы абзацы сталкивались друг с другом, когда окно становилось слишком маленьким.
Panel.SetMinSize, кажется, не является кандидатом, поскольку я никогда не узнаю минимальную высоту на основе текущего абзацапо ширине окна.
#!/usr/bin/env python3
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
frame_sizer = wx.BoxSizer(wx.VERTICAL)
text1 = wx.StaticText(self, label=self.big_string_one())
text2 = wx.StaticText(self, label=self.big_string_two())
color_panel = wx.Panel(self)
color_panel.SetMinSize(size=wx.Size(-1, 10))
color_panel.SetMaxSize(size=wx.Size(-1, 10))
color_panel.BackgroundColour = "blue"
frame_sizer.Add(text1, 1, flag=wx.ALL|wx.EXPAND, border=10)
frame_sizer.Add(color_panel, 1, flag=wx.EXPAND)
frame_sizer.Add(text2, 1, flag=wx.ALL|wx.EXPAND, border=10)
self.SetSizer(frame_sizer)
def big_string_one(self):
retval = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " \
"Ut ipsum lectus, mollis et pellentesque at, dapibus " \
"eu, laoreet dui. Class aptent taciti sociosqu ad litora " \
"torquent per conubia nostra, per inceptos himenaeos. " \
"Curabitur vestibulum, turpis fringilla convallis " \
"commodo, lectus lorem pharetra metus, non interdum magna " \
"convallis. Sed id metus in leo porttitor eleifend. " \
"Vivamus eget arcu at ligula ullamcorper consequat eget " \
"non turpis. Duis consequat ultrices dolor eu porta. Cras " \
"malesuada elementum urna, sed vulputate metus."
return retval
def big_string_two(self):
retval = "Morbi finibus hendrerit lacinia. Vestibulum eget metus " \
"vitae mi vehicula dignissim. Donec lobortis dignissim " \
"nisl, rutrum viverra nisl vulputate sed. Quisque quis " \
"placerat. Ut tincidunt dolor justo, fermentum lacinia " \
"metus bibendum a. Morbi ornare id ligula a eleifend. " \
"Phasellus at ultricies ante. Praesent malesuada nunc " \
"tortor, vel accumsan ex tempus at. Praesent eget ligula " \
"ac purus pharetra semper rutrum a nunc. Donec et " \
"lobortis mauris, non suscipit erat. Cras sagittis urna " \
"lobortis tortor vestibulum, vel pulvinar nisi finibus."
return retval
if __name__ == "__main__":
app = wx.App()
my_frame = MyFrame(None).Show()
app.MainLoop()
Окно имеет размер, и оба текста абзаца выглядят хорошо
Теперь окно меньше, а текстПервый абзац обрезается синей проставкой.
Я предпочитаю, чтобы текст всех абзацев проходил хорошо, но не перекрывал друг друга, когда окно становится меньше.