0

ポップアップ ウィンドウを作成しましたが、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)
4

2 に答える 2

2

あなたの問題は、パネルがポップアップウィンドウほど大きくないことだと思います...したがって、テキストフィールドが拡大してサイザー領域を埋めているにもかかわらず、ポップアップ自体を埋めていません。

のようなものを使用してみてください

def __init__(...):
     ...
     self.SetMinSize((700,287))
     sizer2 = wx.BoxSizer()
     sizer2.Add(panel)
     self.SetSizer(sizer2)

また、ある時点でレイアウトを呼び出していることを確認してください(これは完全にテストされていないことに注意してください...したがって、数週間必要になるか、さらに悪いことに間違っている可能性があります...)

于 2013-12-05T01:02:18.800 に答える
0

実際の答えは次のとおりです。

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() に気づいた Joran の功績。

ウィンドウ自体にサイザーを設定できるため、PopupWindow に追加のパネルは必要ありません。これは、wxPython Widget Inspection Tool を使用して実現されています。

TextCtrl と PopupWindow が同じサイズであることを確認してください。

于 2013-12-05T04:45:06.627 に答える