wxPython: TextCtrl во всплывающем окне
Я создал всплывающее окно, но TextCtrl не полностью раскрыт, чтобы заполнить окно. Это прекрасно работает, если я использую StaticText вместо этого (но если содержимое слишком большое, мне понадобится полоса прокрутки, поэтому я сейчас использую TextCtrl). Пожалуйста, предоставьте некоторые рекомендации.
self.description = WindowPopup(self, wx.SIMPLE_BORDER, content)
btn = event.GetEventObject()
dw = wx.DisplaySize()[0]
width = self.description.GetSize()[0]
y = btn.ClientToScreen((0,0))[1]
height = btn.GetSize()[1]
x = dw - width - 20 - 10
self.description.Position((x, y), (0, height))
self.description.Show(True)
class WindowPopup(wx.PopupWindow):
""" Pops up a window to provide description for the selection """
def __init__(self, parent, style, content):
wx.PopupWindow.__init__(self, parent, style)
self.SetSize((700, 287))
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
st = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE | wx.TE_READONLY)
st.SetValue(content)
sizer.Add(st, 0, wx.EXPAND)
panel.SetSizer(sizer)
2 ответа
Фактический ответ:
sizer = wx.BoxSizer(wx.VERTICAL)
st = wx.TextCtrl(self, -1, style = wx.TE_MULTILINE | wx.TE_READONLY, size = (500, 174))
st.SetValue(content)
self.SetSize((500, 174))
sizer.Add(st, 0, wx.EXPAND)
self.SetSizer(sizer)
self.Layout()
self.Show(True)
Благодарность Джорану за то, что он заметил Layout ().
PopupWindow не требует дополнительной панели, потому что для самого окна может быть задан sizer. Это было реализовано с помощью wxPython Widget Inspection Tool.
Убедитесь, что TextCtrl и PopupWindow имеют одинаковый размер.
Я подозреваю, что ваша проблема в том, что панель не такая большая, как всплывающее окно... поэтому, даже если текстовое поле расширяется, чтобы заполнить область его размера, оно не заполняет само всплывающее окно.
попробуйте использовать что-то вроде
def __init__(...):
...
self.SetMinSize((700,287))
sizer2 = wx.BoxSizer()
sizer2.Add(panel)
self.SetSizer(sizer2)
также убедитесь, что вы вызываете макет на нем в какой-то момент (обратите внимание, что это полностью не проверено... поэтому может потребоваться несколько твиков, или, что еще хуже, просто ошибаться...)