我创建了一个弹出窗口,但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)
我怀疑你的问题是面板没有popwindwindow那么大。。。因此,即使文本字段正在扩展以填充其sizer区域,它也不会自行填充弹出窗口。
尝试使用类似的东西
def __init__(...):
...
self.SetMinSize((700,287))
sizer2 = wx.BoxSizer()
sizer2.Add(panel)
self.SetSizer(sizer2)
还要确保你在某个时候调用了它的布局(注意,这完全没有经过测试……所以它可能需要一些粗花呢,甚至更糟的是,这是错误的……)
实际答案是:
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)
感谢Joran注意到Layout()。
PopupWindow不需要额外的面板,因为窗口本身可以设置sizer。这是通过使用wxPython Widget Inspection Tool实现的。
确保TextCtrl和PopupWindow的大小相同。