2009-06-24 7 views
4

を与えるにもかかわらず、全体の親フレームに合わせて拡大縮小します。 しかし、関係なく、私はwx.Panelはsize属性を使用して何をすべきか、単一のパネルは、その親フレームのサイズにスナップしません。 別のパネル(下のコードでpane2)を追加すると、両方のペインが正しいサイズで描画されます。wx.Panelは私がフレームを持ってしようとしています をwxPythonのために初心者をしていると私は青に着色しています、小さなパネル領域内それにサイズ

私はサイザーを使用してこれらのパネルを制御することができます知っています。しかし、私はwx.Panelオブジェクトが、それだけですべての場合と同じように動作する理由を理解しようとしていました。ここで

コードです:デフォルトでは

輸入WX

class PlateGui(wx.Frame): 

    def __init__(self, *args , **kwds): 
     self.frame = wx.Frame.__init__(self,*args, **kwds) 
     print "Made frame" 


if __name__ == "__main__": 
    an_app = wx.PySimpleApp() 
    aframe = PlateGui(parent=None,id=-1,title="Test Frame",size=(300, 300)) 
    pane = wx.Panel(parent=aframe,size=(100,100),style=wx.RAISED_BORDER) 
    pane.SetBackgroundColour(wx.Colour(0,0,255)) 
# pane2 = wx.Panel(parent=aframe,size=(200,100),style=wx.RAISED_BORDER) 
# Commenting out the second pane makes the first pane fit 
# entire frame regardless of size specified 
    aframe.Show() 
    an_app.MainLoop() 

答えて

11

、wx.Frameは枠を埋めるために、その子を拡大サイザーを持っています。独自のサイザーを作成し、それにパネルを追加し(拡張フラグを指定せずに)、フレームのサイザーとして設定します。

import wx 
app = wx.PySimpleApp() 
frame = wx.Frame(None, -1, 'Test') 
sizer = wx.BoxSizer(wx.VERTICAL) 
panel = wx.Panel(frame, -1, size=(100,100), style=wx.BORDER_RAISED) 
sizer.Add(panel) 
frame.SetSizer(sizer) 
frame.Show() 
app.MainLoop() 
+0

驚くばかりのFogleBird-ありがとう - 私の唯一の子供にsizerを課しているwx.Frameのこの「機能」は、それほどうまく書かれていないのですか?私は何時間も苦労し、最後に2番目のペインを追加すると、wx.Frameはそのサイザーから最初のペインをリリースしました。私がこれを考え出した文書がいくつかありますか? 私はあなたを投票するが、私はStackOverflowのために新しいですし、私は初心者を推測ありがとうあなたいずれかを助けてはいけません。おかげでここから – harijay

+4

とにかく、この質問に答えるために:http://docs.wxwidgets.org/stable/wx_wxframe.html#wxframe は「フレームは正確に一つの子ウィンドウを持っている場合は、ステータスツールバーを数えていない、この子のサイズが変更されますフレーム全体のクライアント領域を占有します。 私の答えが好きな人は、私に投票してください。もしあなたがそれが正しいと思うなら、あなたは私の答えを正しいものとしてマークするべきです。あなたはどんなに新しいかは関係ありません。 :) – FogleBird

+0

ねえ、何年後、私は疑問だ:私はまだサイザーをしたいと言うが、私はまた、親フレームに収まるようにパネルのようなものを私は何をする必要がありますでしょうか? 'sizer.add(panel、wx.EXPAND)'は動作しません。 – TankorSmash

関連する問題

 関連する問題