python - 难以理解 wxPython 中的 wx.Sizer

标签 python python-2.7 wxpython pywin32

wxPython 的文档非常少,理解 sizer 有点困难,我不得不打印代码并逐段研究它以了解它的作用,以及更简单的方法来记住它是如何工作的。

由于我来自网络背景,我倾向于将 sizer 与 xhtml div 标签进行比较,并将 css 与标志以及 wxpython 中没有的内容进行比较,但看到 div 和 css 间隔很好等等,跟上 wxpython 中的所有内容有点困难,但我想时间会证明一切。

在这里,我尝试创建一个带有面板的简单框架,以及一个带有标签和十个像素边框的静态框,以及一些静态文本和一些文本控件。 (wx.TextCtrl)

这就是我的目标。

wx.StaticBox

我想代码不会太多,但是由于父项和标志之类的数量太多,它只会变得令人困惑。

我怎样才能添加一个带填充的静态框,这样它就不会接触面板的侧面(边框),我怎么知道我应该使用什么尺寸调整器?

最佳答案

这里为您提供了一个更易于维护的起点。

enter image description here

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()

关于python - 难以理解 wxPython 中的 wx.Sizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794038/

相关文章:

Python psycopg2 语法错误

python - Python 中的用户输入不使用回车键?

python pandas 如何将具有相同列值的 pandas 组合起来

python - 需要将 `-` 字符嵌入到 python argparse 中的参数中

python - wxPython 插入符移动事件

python - 从 XCode 运行 python 脚本时不写入文件

javascript - Django "static"文件 - Javascript

python - Discord.py 消息被发送多次,每次增加 1

python - 在 wxPython 应用程序中嵌入 3D 编辑器(例如 Blender)

python - 关于wxpython如何隐藏黑色文件背景