2009-09-03 56 views
0

Frameオブジェクトを作成しましたが、これを展開できる幅を制限したいとします。フレーム内の唯一のウィンドウはScrolledWindowオブジェクトで、他のすべての子を含みます。 BoxSizerを垂直に配置したオブジェクトがたくさんあるので、ScrolledWindowオブジェクトがかなり高くなります。右にスクロールバーがありますので、上下にスクロールすることができます。wxPythonのScrolledWindowでFrameの最大幅を設定する

フレームの最大サイズを設定しようとすると問題が発生します。 ScrollledWindowのscrolled_window.GetBestSize()(またはscrolled_window.GetEffectiveMinSize())機能を使用していますが、垂直スクロールバーを考慮していません。私はちょうど少し狭いフレームを持っていると、決して遠くに行くことはない水平スクロールバーがあります。

垂直スクロールバーの幅を補う方法はありますか?もしそうでなければ、スクロールバーの幅をどのようにして手動でそれを私のフレームの最大サイズに加えることができますか?

はここで背が高くなく、狭額縁での例です:

class TallFrame(wx.Frame): 
    def __init__(self): 
    wx.Frame.__init__(self, parent=None, title='Tall Frame') 
    self.scroll = wx.ScrolledWindow(parent=self) # our scroll area where we'll put everything 
    scroll_sizer = wx.BoxSizer(wx.VERTICAL) 

    # Fill the scroll area with something... 
    for i in xrange(10): 
     textbox = wx.StaticText(self.scroll, -1, "%d) Some random text" % i, size=(400, 100)) 
     scroll_sizer.Add(textbox, 0, wx.EXPAND) 
    self.scroll.SetSizer(scroll_sizer) 
    self.scroll.Fit() 

    width, height = self.scroll.GetBestSize() 
    self.SetMaxSize((width, -1)) # Trying to limit the width of our frame 
    self.scroll.SetScrollbars(1, 1, width, height) # throwing up some scrollbars 

あなたはこのフレームを作成する場合は、self.SetMaxSizeが狭すぎる設定されていることがわかります。 self.scroll.GetBestSize()はスクロールバーの幅を考慮していないので、水平スクロールバーが常に存在します。

+0

私は興味がありますが、問題やその答えは分かりません。そのポイントを示す小さなコード例を投稿できますか? – tom10

+0

コードを送信していただきありがとうございます。私はこの問題を見て、それを少しでも回ったが、それを理解しなかった。確かにwxPythonユーザやwxユーザの誰かが知っているはずです。 (スクロールバーを追加する前にすべてのサイズを設定していますが、興味があります) – tom10

+0

なぜ最大サイズを設定しますか?エンドユーザーがあなたのアプリを本当に大きくすることに害は何ですか? –

答えて

1

これは少し醜いですが、ウィンドウとLinuxで動作するようです。しかし、違いがあります。 self.GetVirtualSize()は、各プラットフォームで異なる値を返すようです。とにかく、これはあなたを助けるかもしれないと思います。

width, height = self.scroll.GetBestSize() 
width_2, height_2 = self.GetVirtualSize() 
print width 
print width_2 
dx = wx.SystemSettings_GetMetric(wx.SYS_VSCROLL_X) 
print dx 
self.SetMaxSize((width + (width - width_2) + dx, -1)) # Trying to limit the width of our frame 
self.scroll.SetScrollbars(1, 1, width, height) # throwing up some scrollbars 
関連する問題