Я пытаюсь использовать TextCtrl
, чтобы обернуть длинную строку текста в приложении. Под объектом TextCtrl
находится объект ListBox
. Между этими двумя границами/прокладкой нет (то есть border
не задано). Однако всякий раз, когда я открываю приложение, между объектом TextCtrl
и объектом ListBox
всегда есть лишнее пробел. Пробел исчезает, только если я попытаюсь изменить размер окна (хотя и немного). Код ниже демонстрирует проблему. Два скриншота ниже кода показывают, что я имею в виду.wxPython: использование TextCtrl для обертывания текста приводит к нежелательному дополнительному пространству под обернутым текстом
class MyApp(wx.Frame):
def __init__(self, parent, title):
super(MyApp, self).__init__(parent, style = wx.DEFAULT_FRAME_STYLE,
title=title, size=(500, 515))
self.SetBackgroundColour('white')
self.myGridSizer = wx.GridBagSizer(4,3)
#App title
Title = wx.StaticText(self, label = "My Application")
Title.SetFont(wx.Font(16, family = wx.DEFAULT, style = wx.NORMAL,
weight = wx.BOLD, faceName = 'Consolas'))
self.myGridSizer.Add(Title, pos = (0, 0), span = (1, 3), flag = wx.EXPAND|wx.ALL, border=10)
#Input textctrl label
input_label = wx.StaticText(self, label="Input File: ")
input_label.SetFont(wx.Font(9, family = wx.DEFAULT, style = wx.NORMAL,
weight = wx.NORMAL, faceName = 'Consolas'))
self.myGridSizer.Add(input_label, pos = (1, 0), span = (1,1), flag = wx.EXPAND|wx.TOP|wx.RIGHT|wx.LEFT, border = 10)
#Input textctrl
input = wx.TextCtrl(self, size=(-1,-1), style = wx.BORDER_SIMPLE)
self.myGridSizer.Add(input, pos = (1, 1), span = (1,1), flag = wx.EXPAND|wx.TOP|wx.RIGHT, border = 10)
#Input button
button = wx.lib.buttons.GenButton(self, id = 1,
size = (-1, -1),
label = "OPEN",
style = wx.BORDER_SIMPLE)
self.myGridSizer.Add(button, pos = (1, 2), span = (1,1), flag = wx.TOP|wx.RIGHT, border = 10)
#Long text to be wrapped
note = "This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap. This is a fairly long text string that I would like to wrap."
noteCtrl = wx.TextCtrl(self, value = note,
style = wx.TE_READONLY|wx.TE_MULTILINE|wx.TE_NO_VSCROLL|wx.BORDER_NONE, size=(-1, -1))
self.myGridSizer.Add(noteCtrl, pos = (2, 1), span = (1,1), flag = wx.EXPAND|wx.LEFT|wx.RIGHT, border = 10)
#LISTBOX
listBoxFields = wx.ListBox(self, choices=[], name='listBox1', style=wx.LB_EXTENDED|wx.BORDER_SIMPLE, size=(-1, -1))
self.myGridSizer.Add(listBoxFields, pos = (3, 1), span=(1,1), flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, border = 10)
self.myGridSizer.AddGrowableCol(1)
self.myGridSizer.AddGrowableRow(3)
self.SetSizer(self.myGridSizer)
if __name__ == "__main__":
app = wx.App()
MainFrame = MyApp(None, title = "My Application")
MainFrame.Show()
MainFrame.Centre()
app.MainLoop()
Это приложение выглядит так. Обратите внимание на пробел, обозначенный зеленой стрелкой
Это приложение выглядит после того, как я очень сильно увеличил ширину окна. Обратите внимание на более узкое пространство, обозначенное красной стрелкой.
В этом случае разница не столь драматична. Но в некоторых других случаях, которые я видел, дополнительное пространство может занимать до 1/3-1/2 окна. Интересно, как я могу удалить это дополнительное пространство без необходимости изменять размер окна.