2

wxPython の文書化は非常に不十分であり、サイザーを理解するのは少し難しいです。コードを印刷して、それが何をするのかを理解するために少しずつ勉強し、どのように機能するかをより簡単に覚える必要がありました。

私はウェブのバックグラウンドから来ているので、サイザーを xhtml div タグと比較する傾向があり、css をフラグや wxpython にはないものと比較しますが、div と css が非常に適切に配置されていることなどを見て、それは少しですwxpython のすべてについていくのは大変ですが、時間が解決してくれると思います。

ここでは、パネルを持つ単純なフレームと、ラベルと 10 ピクセルの境界線を持つ静的ボックス、いくつかの静的テキストといくつかのテキスト コントロールを作成しようとしています。(wx.TextCtrl)

これが私が作成しようとしているものです。

wx.StaticBox

コードはそれほど多くないと思いますが、親やフラグなどの量が多いと、混乱するだけです。

パネルの側面 (境界線) に触れないようにパディング付きの staticbox を追加するにはどうすればよいですか?

4

2 に答える 2

3

これが、はるかに保守しやすい出発点です。

ここに画像の説明を入力してください

import wx

class PersonalInfoDialog(wx.Dialog):
    def __init__(self, parent):
        super(PersonalInfoDialog, self).__init__(parent)
        self.SetTitle('Personal Info')
        sizer = self.create_controls()
        self.SetSizer(sizer)
    def create_controls(self):
        box = self.create_box()
        buttons = self.create_buttons()
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(box, 1, wx.EXPAND | wx.ALL, 10)
        sizer.Add(buttons, 0, wx.EXPAND | wx.BOTTOM, 10)
        return sizer
    def create_box(self):
        contents = self.create_box_contents()
        box = wx.StaticBox(self, -1, 'Personal Info')
        sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
        sizer.Add(contents, 1, wx.EXPAND | wx.ALL, 10)
        return sizer
    def create_box_contents(self):
        male = wx.CheckBox(self, -1, 'Male')
        married = wx.CheckBox(self, -1, 'Married')
        age = self.create_age()
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(male)
        sizer.AddSpacer(10)
        sizer.Add(married)
        sizer.AddSpacer(10)
        sizer.Add(age)
        return sizer
    def create_age(self):
        age = wx.SpinCtrl(self, -1, '28', min=0, max=100, size=(64, -1))
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        text = wx.StaticText(self, -1, 'Age')
        sizer.Add(text, 0, wx.ALIGN_CENTER_VERTICAL)
        sizer.AddSpacer(10)
        sizer.Add(age)
        return sizer
    def create_buttons(self):
        button = wx.Button(self, wx.ID_OK, 'OK')
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.AddStretchSpacer(1)
        sizer.Add(button)
        sizer.AddStretchSpacer(1)
        return sizer

def main():
    app = wx.App(False)
    dialog = PersonalInfoDialog(None)
    dialog.ShowModal()
    dialog.Destroy()
    app.MainLoop()

if __name__ == '__main__':
    main()
于 2012-12-11T15:34:37.037 に答える
0

これは基本的にあなたが望むものを作成します..おそらくいくつかの小さな変更が必要です..

import wx
a = wx.App(redirect=False)
f = wx.Frame(None,-1,"application")
p = wx.Panel(f,-1)
sb = wx.StaticBox(p,-1,"label")
sb_sz = wx.StaticBoxSizer(sb,wx.VERTICAL)
sb_sz.Add(wx.CheckBox(p,-1,"CB 1",size=(200,-1)),0,wx.ALL,10)
sb_sz.Add(wx.CheckBox(p,-1,"CB 2"),0,wx.ALL,10)
sb_sz.AddSpacer(7)
sz_h = wx.BoxSizer(wx.HORIZONTAL)
sz_h.Add(wx.StaticText(p,-1,"Some Label"),0,wx.ALL,10)
sz_h.Add(wx.Choice(p,-1,choices = ["A","B","C"]))
sb_sz.Add(sz_h)
sb_sz.AddSpacer(35)
sz = wx.BoxSizer(wx.VERTICAL)
sz.Add(sb_sz,0,wx.ALL,10)
p.SetSizer(sz)
sz_h2 = wx.BoxSizer(wx.HORIZONTAL)
sz_h2.Add(wx.Button(p,wx.ID_OK))
sz_h2.Add(wx.Button(p,wx.ID_CANCEL))
sz.Add(sz_h2,0,wx.ALIGN_RIGHT|wx.ALL,10)
sz2 = wx.BoxSizer()
f.SetSizer(sz2)
sz2.Add(p)
f.Layout()
f.Fit()
f.Show()
a.MainLoop()

ここに画像の説明を入力

于 2012-12-10T02:36:32.167 に答える