Как я могу создать многострочный wx.ComboCtrl в wxPython?

Установка флага стиля wx.TE_MULTILINE для самого ComboCtrl или связанного с ним TextCtrl не приводит к изменению после Refresh(). Погуглив некоторое время, я увидел несколько источников, в которых утверждалось, что создать многострочный Combo Box сложно/невозможно, но создать многострочный Combo Ctrl было достаточно просто, чтобы не упомянул, как это делается. Тут явно что-то не так делаю, но вопрос в чем?

class MultiCombo(wx.combo.ComboCtrl):
    def __init__(self, parent):
        wx.combo.ComboCtrl.__init__(self, parent, style=wx.TE_MULTILINE)

multicombo = MultiCombo(parent_panel)
##  multicombo.SetWindowStyle(wx.TE_MULTILINE)
multicombo.GetTextCtrl().SetWindowStyle(wx.TE_MULTILINE)
multicombo.GetTextCtrl().Refresh()
multicombo.Refresh()

Примечание: предоставленный код является урезанным примером — фактический код выглядит немного иначе.


person mayhew    schedule 17.03.2012    source источник


Ответы (1)


Проблема в том, что согласно документации:

Обратите внимание, что стили выравнивания (wxTE_LEFT, wxTE_CENTRE и wxTE_RIGHT) могут динамически изменяться после создания элемента управления на wxMSW и wxGTK. wxTE_READONLY, wxTE_PASSWORD и стили переноса могут динамически изменяться в wxGTK, но не в wxMSW. Остальные стили можно задать только при создании элемента управления.

Поэтому вместо изменения стиля вам нужно использовать wxComboCtrl::SetTextCtrlStyle, как показано в документация.

person SteveL    schedule 11.04.2012