wxPython 2 - wxPython基础

第一个 wxPython 程序

上篇教程的最后部分留下了一个优化后的 wxPython 程序,代码如下:

# wxPython2.py

from wx import *


class MyFrame(Frame):

    def __init__(self):
        super(MyFrame, self).__init__(None, title="第一个wxPython程序", size=(600, 400), pos=(300, 225))


class MyApp(App):

    def OnInit(self):
        frame = MyFrame()
        frame.Show()

        return True

    def OnExit(self):
        print("程序结束")

        return 0


if __name__ == "__main__":
    app = MyApp()

    app.MainLoop()

最终运行结果如图所示。

这个程序的每部分代码分别对应的意思如下。

  1. class MyFrame(Frame): 创建 Frame 的子类 MyFrame;
  2. super(MyFrame, self).__init__(None, title="第一个wxPython程序", size=(600, 400), pos=(300, 225)) 初始化:parent=None, title=“第一个wxPython程序”,size=(600, 400),pos=(300, 225) (每个参数的意义在该专栏上篇文章《wxPython 1 - 图形用户界面初认识》中均有说明);
  3. class MyApp(App): 创建 App 的子类 MyApp;
  4. def OnInit(self): 重写了在 App 类加载时首先调用的方法 OnInit ;
  5. return True 这一条返回无论写 return false 还是不写,都会报错 OnInit returned false, exiting...。 而当不写返回语句时,还会有 TypeError :方法限定的返回值为 bool 类型,返回了 None 。
  6. def OnExit(self): 重写了在 App 类关闭时调用的方法 OnExit (注:这条在实际开发中一般不加,这里加上仅是为了体现 print("程序结束") );
  7. return 0 这里似乎返回一个 int 即可。不知为什么,返回其他的数也没有标注或报错。

Panel 面板

一般来说, wxPython 中控件一般放在内容面板而非直接添加到 Frame 里。最基础的面板为 Panel ,其他的特殊 Panel 比如 ScrolledPanel 等以后的教程中将会作讲解,现对于 wx.Panel 作基础的讲解。
Panel 基本构造如下:

Panel(parent, id=ID_ANY, pos=DefaultPosition, size=DefaultSize, style=TAB_TRAVERSAL, name=PanelNameStr)

一般来说,使用 Panel 时只需要设置 parent 参数,与其他参数一样,设置 Panel 的父 Panel ,或窗口( self );有一些时候也会用到 style 。 Panel 可设置的 style 也是 wx.Windows 的 Style ,所有控件都可以设置。常用 style 如下:
Border 设置:

  • BORDER_SIMPLE: 为 Panel 设置细边框;
  • BORDER_SUNKEN: 为 Panel 设置凹陷效果的边框(阴影);
  • BORDER_RAISED: 为 Panel 设置突起效果的边框(阴影);
  • BORDER_STATIC: 一个比较适合静态控件的边框,一般不为 Panel 设定。这种边框类似 BORDER_SUNKEN 。需要注意的是,该 style 只在 Windows 下生效。
  • BORDER_THEME: 一个很特殊的边框,适合控件的本机边框,同样不设定至 Panel 。这种边框据帮助文档所述,在除了 Windows 之外的平台上会显示凹陷的样式,个人没有经过测试。
  • BORDER_NONE: 这个边框在静态控件中一般不设定。这个 style 指定了控件没有边框,在将要学习的 Button 中会有一些作用。

除了 Border 一类的常用 style 外,控件(这里只讲了 Panel ,其他的任何继承于 Window 控件也包括同样的 style)所共有的 style 还有许多,这里也放不下,可以参见 帮助文档

当有许多个 style 需要设的时候,可以使用位或运算|连接各个 style 。

以下是对于 Panel 的一个应用。

# wxPython2.py

from wx import *


class MyFrame(Frame):

    def __init__(self):
        super(MyFrame, self).__init__(None, title="第一个wxPython程序", size=(600, 400), pos=(300, 225))

        self.panel = Panel(self)

        self.inPanelA = Panel(self.panel, style=BORDER_SIMPLE, pos=(0, 0))
        self.textA = StaticText(self.inPanelA, label="A")

        self.inPanelB = Panel(self.panel, style=BORDER_SUNKEN, pos=(50, 0))
        self.textB = StaticText(self.inPanelB, label="B")

        self.inPanelC = Panel(self.panel, style=BORDER_RAISED, pos=(100, 0))
        self.textC = StaticText(self.inPanelC, label="C")

        self.inPanelD = Panel(self.panel, style=BORDER_STATIC, pos=(150, 0))
        self.textD = StaticText(self.inPanelD, label="D")

        self.inPanelE = Panel(self.panel, style=BORDER_THEME, pos=(200, 0))
        self.textE = StaticText(self.inPanelE, label="E")

        self.inPanelF = Panel(self.panel, style=BORDER_NONE, pos=(250, 0))
        self.textF = StaticText(self.inPanelF, label="F")


class MyApp(App):

    def OnInit(self):
        frame = MyFrame()
        frame.Show()

        return True


if __name__ == "__main__":
    app = MyApp()

    app.MainLoop()

这个示例基本不用对其作讲解。 __init__ 方法中创建了整个窗口的内容面板 panel ,又分别创建了其子类 inPanel A~F 。每个子 panel 都有一个 text ,是一个 StaticText 对象,以后会有详细讲解。这里只需知道,第一个参数是几乎所有控件统一的 parent ,第二个 label 就是其在页面显示的文本。
每个 Panel 有着不同的 style ,分别使用了以上讲过的六种设置 border 的样式。效果如下。

从这个实验可知,其各个包含 StaticText 控件的 Panel 的样式即上述的六种描述的样子。

后记

下一篇将会详细讲解一直用到的 Frame 类,欢迎关注专栏以便继续学习~

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__程序喵__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值