wxPython-4.0.3 - предотвращение перекрытия расширяющихся панелей - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь создать объект 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()

Окно имеет размер, и оба текста абзаца выглядят хорошо enter image description here

Теперь окно меньше, а текстПервый абзац обрезается синей проставкой.enter image description here

Я предпочитаю, чтобы текст всех абзацев проходил хорошо, но не перекрывал друг друга, когда окно становится меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...