GUI 应用程序

GUI 应用程序

  • 1. 创建一个简单的 wxPython 程序
  • 2. 窗口
  • 3. 控件:面板、标签、菜单栏
  • 4. 智能的布局
    • 4.1 Sizer 概述
  • 5. 制作一个建议简易编译器
  • 结束语

1. 创建一个简单的 wxPython 程序

创建和启动一个 GUI 程序需要6个步骤,如下所示:

  1. 导入 wx 模块;
  2. 定义应用程序类的一个对象;
  3. 创建一个顶层窗口的 wx.Frame 类的对象,来容纳整个 GUI 应用;
  4. 在顶层窗口对象之上构建所有的 GUI 组件及其功能;
  5. 通过底层应用代码将这些 GUI 组件连接起来;
  6. 进入主事件循环;
    例子1:
    2021-8-16

解析:
第 1 行: 在Linux和UNIX等操作系统上,告诉操作系统如何找到执行这个程序的解释器;包含它可以实现代码的跨平台;若程序被赋予执行程序(如 chmod 命令),可以在命令行下输入该程序的名字运行程序:% hello.py
第 2 行:导入 wx 模块,就能创建应用程序(appliction)对象和框架(frame)对象;每个 wxPython 程序必须有一个 application 对象和至少一个 frame 对象;application 对象必须是 wx.APP 的一个实例或在 OnInit() 方法中定义的一个子类的一个实例;当程序启动时 OnInit() 方法将被 wx.APP父类调用;
第 3 行: 创建 wx.APP 子类的实例;大多数的简单应用都采用类似本行所示方法的方式使用,当编写复杂的应用时可能要继承 wx.APP 的类;
第 4 行: wx.Frame 表示一个顶层窗口;
第 5 行: 显示Frame 窗口;
第 6 行: 调用 MainLoop 方法启动应用,进入主事件循环,控制权转交给wxPython ;wxPython GUI 程序主要响应用户的鼠标和键盘事件;当一个程序的所有框架被关闭后,app.MainLoop() 方法将返回并程序退出;

2. 窗口

框架就是窗口;在 wxPython 中, wx.Frame 是所有窗口的父类;GUI 编程中,顶层的根窗口包含组成 GUI 应用的所有组件对象,组件对象可以是文字标签、按钮、标题、菜单、面板、文本框等;
这些独立的 GUI 组成被称为 控件
窗口:wx.Frame ;
wx.Frame 是一个容器控件,可以容纳其他的控件
如:wx.Frame(parent,id,title,pos,size,syle,name)
参数的具体含义如下表所示:
2021-8-17

3. 控件:面板、标签、菜单栏

  1. 面板:wx.Panel
    面板也是一个控件,可将其他的控件放在上面;wx.Panel 类通常是被放在一个 wx.Frame 对象中;该类继承 wx.Window 类;
    在面板上在防止其他小控件,所以,需要在框架(frame)中加入面板,wx.Panel(),下一步让面板来管理当前的窗口应该方什么控件及如何放置这些控件;
    例子2:
    在例子1的程序,第四行后加入panel = wx.Panel(frame),声明一个面板;,若不在面板中放入其他空控件,程序的执行结果就不会发生变化;
    2021-8-17

  2. 标签: label
    显示一些不被用户改变的文本;
    例子3:
    2021-8-17
    wx.Python 中,wx.StaticText 类对象提供了一个用于持有只读文本的控件;
    wx.StaticText 类的构造函数为wx.StaticText(parent,id,label,position,size,style)
    设置标签的字体,需要先创建一个字体对象Wx.Font(pointsize,fontfamily,fontstyle,fontweight)
    例子4:
    2021-8-17

  3. 菜单栏: wx.Menu
    菜单栏一般显示在顶层窗口的标题栏下方,使用 wxPython 的 wx.MenuBar 对象;
    wx.MenuBar 类有一个默认的无参数:wx.MenuBar()
    还有一个带参数的构造函数:
    wx.MenuBar(n,menus,titles,style)
    参数 “n” 表示的菜单的数目,menus 是菜单和标题的数组和字符串数组;若 style 参数设置为 wx.MB_DOCKABLE,表明鼠标可停靠在菜单栏上;
    wx.Menubar 类的方法列表如下所示:
    2021-8-17
    wx.Menu 类对象可以是一个或多个菜单项,其中一个可被用户选择的下拉列表;
    wx.Menu 类经常需要的方法如下表所示:
    2021-8-17
    可使用 Append() 函数添加一个菜单项:wx.Menu.Append(id,text,kind)
    或使用 wx.MenuItem 类追加一个对象:Item = wx.MenuItem(parentmenu,id,text,kind)
    wx.Menu.Append(Item)
    例子5(设置一个标准的菜单,对菜单分类,一级菜单下有二级子菜单):
    2021-8-17
    解析:
    第 1 ~ 4 行:导入 wx,定义一个 wx.App,每一个 wxPython 应用程序都是 wx.App 这个类的一个实例;新开一个顶层框架,设置框架标题和框架大小,在框架面板上放置一个面板控件;
    第 5 行:定义一个菜单栏的变量 menuBar;
    第 6 ~ 9 行:定义一个菜单的变量 fileMenu;fileMenu 等变量对大小写敏感;每个字符要相同才能使用;使用 MenuItem 类手动创建对象,赋值给 newitem;Item = wx.MenuItem(parentmenu,id,text,kind)
    MenuItem 的各项参数:
    (1) parentmenu 为菜单的上级父菜单;
    (2)id 是唯一定义本菜单的 id;
    (3)text 是菜单对外显示的标题;
    (4)kind 是菜单的显示类型;
    使用 MenuItem 手动创建对象,能定义更丰富的内容,如增加图标,字体等;
    wxPython 工具包只能将位图(bitmap)放入菜单,选哟将图片文件转换为位图;
    菜单项设置显示位图或快捷方式:wx.MenuItem.SetBitmap(wx.Bitmap(image file))
    使用 Append()方法,创建的 MenuItem 对象增加到创建的菜单中;
    AppendSeparator() 添加一个分割线;
    第10 行:定义一个子菜单的变量 editMenu;
    第 11 ~ 14 行:建立两个子菜单 “copy” 和 “cut”,添加到 editMenu 菜单项;
    第15 ~ 16 行:使用 AppendMenu 方法给 fileMenu 增加一个标题名 “编辑” 菜单,这个菜单绑定了名称为 editMenu 菜单;添加一个分割线;
    第 17 行:使用 Append 方法将 fileMenu 添加到 menuBar 菜单,标题为 “File”;
    第 18~20 行:为框架设置菜单栏,使用之前做好的 munuBar 菜单;显示在框架上,运行程序;

4. 智能的布局

wxPython 的布局管理机制采用 Sizer 方式;
每个不同的 Sizer 基于一套规则管理自己的尺寸和位置;在父窗口中添加的控件都需设置一个 Sizer,有 Sizer 来管理每个窗口部件的尺寸和位置;
在处理复杂布局时首先想到使用 Sizer 来自动布局窗口部件。当子窗口部件的容器的尺寸改变时,Sizer 将自动计算容器中其他控件的布局并做出相应调整;若其中一个控件改变了尺寸,Sizer 也能自动刷新布局;

4.1 Sizer 概述

一个 wxPython Sizer 是一个对象,它唯一的目的就是管理窗口控件的布局;Sizer 本身不是一个控件,是一个屏幕布局的算法
所有的 Sizer 都是抽象类 wx.Sizer 的一个子类的实例;
wxPython 提供了 5 个 Sizer,具体如下表所示:
2021-8-17
使用一个 Sizer 的 三个基本步骤:

  1. 创建并关联 Sizer 到一个窗口;
  2. 使用 Add() 方法为窗口的每个子控件添加;
  3. 使用 Fit() 方法使 Sizer 你能够就按尺寸;

5. 制作一个建议简易编译器

例子6:

# 导入模块 wx
例子
import wx
class MainWindow(wx.Frame):def __init__(self,parent,title,size):        wx.Frame.__init__(self,parent,title = title,size = size)# 建立简易的编译器self.control = wx.TextCtrl(self,style = wx.TE_MULTILINE)# 建立菜单filemenu = wx.Menu()menuAbout = filemenu.Append(wx.ID_ABOUT,"&关于","关于本软件的相关信息")menuExit = filemenu.Append(wx.ID_EXIT,"&退出","退出当前程序")# 创建菜单条menuBar = wx.MenuBar()menuBar.Append(filemenu,"&File")# 添加菜单条的框架内容self.SetMenuBar(menuBar)# 创建底部状态栏的按钮提示信息self.CreateStatusBar()  # 创建窗口底部的状态栏# 绑定事件self.Bind(wx.EVT_MENU,self.OnAbout,menuAbout)self.Bind(wx.EVT_MENU,self.OnExit,menuExit)self.Show(True)# 将弹出窗口事件写成一个 OnAbout 函数def OnAbout(self,e):dlg = wx.MessageDialong(self,"A small text editor","About Sample Editor",wx.OK)dlg.ShouModal()dlg.Destroy()# 退出事件def OnExit(Self,e):self.Close(True)app = wx.App(False)
frame = MainWindow(None,"Sample editor",(300,200))
app.MainLoop()

结果如下所示:

简易编译器


例子中涉及5个常见的基本功能:

  1. 建立编译器;
  2. 建立菜单;
  3. 建立底部按钮信息提示;
  4. 绑定菜单按钮执行事件;
  5. 弹出窗口;

结束语

若这篇文章有帮到你,给个赞,收个藏,欢迎大家评论;
若文章有什么错误,欢迎大家指教。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部