wxpython手册 您所在的位置:网站首页 wxpython中文手册 wxpython手册

wxpython手册

2023-07-18 03:01| 来源: 网络整理| 查看: 265

如果你以前使用过visual studio开发过winForm,想必对它的拖拽设计界面的功能印象深刻。使用wxPython开发GUI应用,也有相应的可视化设计工具,常见的wxGlade和wxFormBuilder,这两种工具我都用过,后者比较好用一些,接下来就来介绍一下wxFormBuilder的使用方法。

安装好了以后,打开wxFormBuilder,如图所示。为了便于说明,我把界面标注了序号,划分成5个区域。区域1是Object Tree,即对象面板,当前界面所有的组件以树形结构显示在这个区域里

区域2是Object Properties,即对象属性面板,可以设置组件的属性和事件绑定

区域3是Editor,即编辑器面板,每个tab分别代表了对应的编辑器内容

区域4是Component Palatte,即常用组件面板,点击即可添加对应的组件

区域5是工具栏

接下来我们借助这个工具来设计一个简单的日记本程序,界面如图所示。

添加Frame

点击组件面板上面的Forms标签,在显示的组件上方,鼠标悬停会出现组件名称,点击Frame组件。可以看到:对象面板上面已经添加了MyFrame1这个节点编辑器面板也出现了一个窗体,点击Python标签页会看到自动生成的代码属性面板的内容也发生变化,在title那一行输入“日记本”,然后鼠标点击空白区域,即可看到窗体标题为“日记本”。修改name为MainFrame,即可将当前窗体命名为MainFrame,其他属性的修改方法同理。

添加Sizer

在组件面板的Layout标签下,点击wxBoxSizer,在属性面板上可以看到默认的布局方向是竖直方向。

添加标题栏

在左侧的对象面板上点击wxBoxSizer节点,然后点击组件面板的Common标签,选择wxTextCtrl组件。

因为标题栏是占满一行的,所以需要设置wx.EXPAND标志,在属性面板的sizeitembase中勾选wxEXPAND 即可,也可以点击工具栏的Expand按钮来实现wx.EXPAND标志。此时文本框已经沾满一行。

在属性面板中的value这一行中填写“请输入笔记标题”,这样文本框就有了默认文字,并修改name为tc_title。

添加详情文本框

点击组件面板的Common标签,选择wxTextCtrl组件,为其设置wx.EXPAND标志,另外,详情文本框还需要占据剩余的垂直空间,我们还需要设置其伸缩比例为1,在属性面板的sizeritem部分中,设置proportion 的值为1,或者直接点击工具栏的Stretch按钮,此时详情文本框占据了剩余空间。修改value为“请输入笔记详情”,并修改name属性为tc_detail。

添加按钮

我们可以将确定和取消按钮单独放在一个BoxSizer里面,点击组件面板的Layout标签页,选择wxBoxSizer组件。然后再点击Common标签页的wxButton按钮,可以发现此时底部区域很大,这是因为新添加的BoxSizer 默认就拉伸了,选中BoxSizer,点击工具栏上的Expand和Stretch按钮,取消水平和垂直拉伸,并设置orient属性为wxHORIZONTAL,表示水平排列,此时底部区域正常了。

在属性面板中,将按钮的Label值设置为“确定”,并修改name属性为btn_save。再添加一个按钮,将Label 值设置为“取消”,并设置name属性为btn_clear。

按钮居中对齐

此时两个按钮是垂直靠右对齐的,选择按钮的上级BoxSizer,勾选sizeitembase 区域中的wxALIGN_CENTER_HORIZONTAL标志,此时按钮已经水平居中了。

添加事件绑定

我们希望点击确定按钮时,会将日记内容保存到文件里面,点击取消时,则清空文本框的内容。

选中确定按钮,在属性面板中点击Events标签,在OnButtonClick那一行输入“save_content”,点击编辑器面板的Python 标签,可以看到生成的代码,定义了一个save_content方法。

接着选中取消按钮,将按钮点击事件绑定为“clear_content”方法。

保存工程

基本界面和事件绑定已经完成了,点击View菜单栏,选中XRC Window菜单,即可预览当前窗体。

点击File菜单选择Save,指定一个文件夹来保存当前工程。

在编辑器里面可以查看到已经生成的Python 代码,我们可以直接复制这部分代码,也可以将代码保存到工程目录下面,具体的做法如下。在对象面板中选择Project节点,然后在对应的属性面板中,找到code_generation,勾选Python选项。

将file 项的值设置为“simple_diary”,同时勾选relative_path。最后在File菜单栏中点击Generate Code菜单,wxFormBuilder就会将Python代码保存到工程目录下的simple_diary.py文件中。

生成的simple_diary.py文件里面的内容如下。

# -*- coding: utf-8 -*-

###########################################################################

## Python code generated with wxFormBuilder (version Oct 26 2018)

## http://www.wxformbuilder.org/

##

## PLEASE DO *NOT* EDIT THIS FILE!

###########################################################################

import wx

import wx.xrc

###########################################################################

## Class MainFrame

###########################################################################

class MainFrame ( wx.Frame ):

def __init__( self, parent ):

wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"日记本", pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )

bSizer1 = wx.BoxSizer( wx.VERTICAL )

self.tc_title = wx.TextCtrl( self, wx.ID_ANY, u"请输入笔记标题", wx.DefaultPosition, wx.DefaultSize, 0 )

bSizer1.Add( self.tc_title, 0, wx.ALL|wx.EXPAND, 5 )

self.tc_detail = wx.TextCtrl( self, wx.ID_ANY, u"请输入笔记详情", wx.DefaultPosition, wx.DefaultSize, 0 )

bSizer1.Add( self.tc_detail, 1, wx.ALL|wx.EXPAND, 5 )

bSizer2 = wx.BoxSizer( wx.HORIZONTAL )

self.btn_save = wx.Button( self, wx.ID_ANY, u"确定", wx.DefaultPosition, wx.DefaultSize, 0 )

bSizer2.Add( self.btn_save, 0, wx.ALL, 5 )

self.btn_clear = wx.Button( self, wx.ID_ANY, u"取消", wx.DefaultPosition, wx.DefaultSize, 0 )

bSizer2.Add( self.btn_clear, 0, wx.ALL, 5 )

bSizer1.Add( bSizer2, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )

self.SetSizer( bSizer1 )

self.Layout()

self.Centre( wx.BOTH )

# Connect Events

self.btn_save.Bind( wx.EVT_BUTTON, self.save_content )

self.btn_clear.Bind( wx.EVT_BUTTON, self.clear_content )

def __del__( self ):

pass

# Virtual event handlers, overide them in your derived class

def save_content( self, event ):

event.Skip()

def clear_content( self, event ):

event.Skip()

实现事件处理方法

因为上面自动生成的文件内容会随着界面变化而变化,所以我们不要直接修改这个文件。我们在工程目录下新建一个main.py文件,输入以下代码。

import wx

from simple_diary import MainFrame

class DiaryFrame(MainFrame):

def save_content(self, e):

with open('diary.txt', 'w+') as f:

f.write(f"{self.tc_title.Value}\n{self.tc_detail.Value}")

def clear_content(self, e):

self.tc_title.Clear()

self.tc_detail.Clear()

app = wx.App()

DiaryFrame(None).Show()

app.MainLoop()

以上就是使用wxFormBuilder设计界面的基本操作,从下一篇开始,我们将进行印象笔记的开发工作。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有