wxpython学习记录

写在前面的话

对于wxpython的学习我推荐三个阶段,第一阶段是完全无基础学习阶段,建议使用 UI 软件进行布局,第二阶段是深化阶段,对wxpython有了一定的基础,可以尝试纯代码布局,加深印象,第三阶段是对wxpython已经相对熟悉了,可以开发项目了,建议还是使用wxpython进行布局设计。

1.准备软件或包

UI软件 :wxFormBuilder 进行UI设计,也可以直接用代码布局,但是,代码布局需要调试的时间更久

wxpython : wx 的python模块,使用 pip install wxpython即可安装,推荐安装在虚拟环境中

2.最基本的窗口

# 导入包
import wx

class MyFrame(wx.Frame):
	def __init__(self,parent):
        wx.Frame.__init__(self,parent,id=wx.ID_ANY,title='APP名称',pos=wx.DefaultPosition,size=(800,600),style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)  # 必须调用wx.Frame的初始化方法
        
        
class MainAPP(wx.App):
    def OnInit(self):
        self.Frame = MainFrame(None)
        self.Frame.Show()
        return True

    
if __name__ == "__main__":
    app = MainAPP()
    app.MainLoop()

3.模块分离

我们的窗口应用会用很多逻辑要实现,如果都写在一个文件中,不利于维护,我们可以将代码进行分离

将窗口布局 和 事件函数 以及 事件绑定 放在UI

将数据库操作 以及 序列化的操作 放在model

4.UI 布局

4.1 纯代码布局
# ui.py

class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=wx.ID_ANY,
                          title='APP名称', pos=wx.DefaultPosition,
                          size=(800, 600),
                          style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
        # ui布局
        # 这里可以放置各种控件
        # 这里的panel也可以理解为一个窗口,但是它的父窗口是主窗口
        panel = wx.PyPanel(self, wx.ID_ANY, style=wx.EXPAND)

        vbox = wx.BoxSizer(wx.VERTICAL)     # 垂直布局
        hbox = wx.BoxSizer(wx.HORIZONTAL)    # 水平布局

        # 静态标签
        self.static_txt1 = wx.StaticText(panel, wx.ID_ANY, label=u'名称', pos=(
            50, 0), size=(150, -1), style=wx.CENTER)
        self.text = wx.TextCtrl(
            panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(150, -1), 0)
        # 参数:第一个参数是指定父级窗口,第二个参数是 id,可以自己指定也可以让程序自动设置,第三个参数是显示的名称,
        # 第四个参数数位置,第五个参数是大小,都是按元组的方式传入,也可忽略按默认值,第六个参数是样式

        # 将静态标签放到hbox布局中
        hbox.Add(self.static_txt1, proportion=1,flag=wx.ALL | wx.FIXED_MINSIZE, border=5)
        hbox.Add(self.text, proportion=1, flag=wx.ALL | wx.FIXED_MINSIZE, border=5)
        # 参数详解 第一个参数是添加的 标签,第二个参数是权重,第三个参数是标志(对齐|边框|尺寸调整),第四个参数是边框的大小
        # 第三个参数之对齐,wx.ALIGN_CENTER,wx.ALIGN_BOTTOM 等等
        # 第三个参数之边框,wx.TOP,wx.ALL 等等
        # 第三个参数之尺寸 wx.EXPAND ,wx.FIXED_MINSIZE

        # 将hbox放到vbox布局中
        vbox.Add(hbox, 1, wx.ALL | wx.EXPAND, 3)
        # 将vbox布局放到panel中
        panel.SetSizer(vbox)


class MainApp(wx.App):
    def OnInit(self):
        self.Frame = MyFrame(None)
        self.Frame.Show()
        return True


if __name__ == '__main__':
    app = MainApp()
    app.MainLoop()
  • 可以直接将控件放在顶级窗口上,也可放在次级窗口

    •   # 控件放在顶级窗口
        self.text = wx.TextCtrl(
                    self,     # 如果是顶级窗口,此时要写self
            		wx.ID_ANY,   # id,默认填 wx.ID_ANY
            		wx.EmptyString,   # 控件显示名称或内容  u''
            		wx.DefaultPosition,  # 位置,非必填项 (x,y)
            		wx.Size(150, -1),    # 大小,非必填项 (宽,高) 高一般填 -1
            		0)                   # 样式,非必填项
        
        # 控件放在次级窗口
        # 首先要设置次级窗口
        panel = wx.PyPanel(self, wx.ID_ANY, style=wx.EXPAND)
        self.text = wx.TextCtrl(
                    panel,     # 如果是次级窗口,此时要写次级窗口
            		wx.ID_ANY,   # id,默认填 wx.ID_ANY
            		wx.EmptyString,   # 控件显示名称或内容  u''
            		wx.DefaultPosition,  # 位置,非必填项 (x,y)
            		wx.Size(150, -1),    # 大小,非必填项 (宽,高) 高一般填 -1
            		0)                   # 样式,非必填项
      
  • 可以使用布局工具进行设计

    • 控件可以放在布局控件中,布局控件也可以放在布局控件中,即布局标签可以嵌套

      •   vbox = wx.BoxSizer(wx.VERTICAL)     # 垂直布局
          hbox = wx.BoxSizer(wx.HORIZONTAL)    # 水平布局
          
          # hbox.Add(控件,权限,标志,边框宽度)
          # 控件的权限作用是,如果添加多个标签,多个标签的占用空间按权限大小分配
          # 标志可以有三部分组成,每部分之间使用 | 连接
          # 标志分为 对齐,边框,尺寸
          
          # 布局控件之间的嵌套也是一样的
        
4.2 UI软件

使用wxFormBuilder设计是,可以根据布局直接生成代码

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值