2016-03-22 1 views
1

Я пытаюсь использовать 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 окна. Интересно, как я могу удалить это дополнительное пространство без необходимости изменять размер окна.

ответ

0

Это прекрасно работает под Linux.
Я полагаю, что вы теряете |wx.BORDER_NONE от линии:

noteCtrl = wx.TextCtrl(self, value = note, 
       style = wx.TE_READONLY|wx.TE_MULTILINE|wx.TE_NO_VSCROLL|wx.BORDER_NONE, size=(-1, -1)) 

как я не думаю, что это действительно синтаксис.
Если это не исправить, попробуйте потерять |wx.TE_NO_VSCROLL от noteCtrl.