GUI框架
这是转载一个博主的
https://blog.csdn.net/panrenlong/category_6923030.html
(2)
wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。
和Python语言与wxWidgets GUI工具库一样,wxPython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它的源代码,或者贡献补丁,增加功能。
wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X。
由于使用Python作为编程语言,wxPython编写简单、易于理解。
1)wxPython中类的继承顺序:
object——>wx.Object——>wx.EvtHandler——>wx.PyApp——>wx.App——>[wx.PySimpleApp,wx.PyWidgetTester]
2)wxPython是wxWidgets的python实现,‘w’——for microsoft windows;‘x’——for unix x server。
3)wxPython最基本的组件是wx.App(应用程序,用过EventLoop来管理生命周期)和wx.Frame(窗口,通过窗口内添加widget组件、控件、格式和行为)
4)每个wxPython只能包含一个wx.App
5)每个wxPython至少包含一个wx.Frame
6)wxPython应用说明:
引用wxPython: import wx(最先)
import wx.***(其他库紧跟其后) 非wx不用考虑顺序
创建App和Frame的顺序:先创建App应用程序对象,后创建Frame框架(即窗口),然后显示(show(true)),最后启动App的MainLoop循环。
7)application对象必须是wx.App的一个实例,或在OnInit()方法中定义的一个子类的一个实例。当应用程序启动的时候,OnInit()方法将被wx.App父类调用。
8)
wx.Frame类不带参数的默认构造函数。它也有一个重载的构造函数的参数如下 -
Wx.Frame (parent, id, title, pos, size, style, name) 【请参考:http://www.yiibai.com/wxpython/wx_frame_class.html】
S.N. 参数 & 描述
1
Parent
窗口的父类。如果“None”被选择的对象是在顶层窗口。如果“None”未被选择时,所述框显示在父窗口的顶层
2
id
窗口标识。通常-1为了让标识符自动生成
3
Title
标题出现在标题栏
4
Pos
帧(frame)的开始位置。如果没有给出,wxDefaultPosition是由操作系统决定
5
Size
窗口的尺寸。 wxDefaultSize 是由操作系统决定
6
style
窗口的外观按样式风格常数控制
7
name
对象的内部名称
窗口样式常量
wx.DEFAULT_FRAME_STYLE
wx.CAPTION
wx.MINIMIZE_BOX
wx.MAXIMIZE_BOX
wx.CLOSE_BOX
wx.SYSTEM_MENU
wx.RESIZE_BORDER
wx.STAY_ON_TOP
wx.FRAME_FLOAT_ON_PARENT
wx.DEFAULT_FRAME_STYLE 可被定义为如下 ?
wx.MINIMIZE_BOX
wx.MAXIMIZE_BOX
wx.RESIZE_BORDER
wx.SYSTEM_MENU
wx.CAPTION
wx.CLOSE_BOX
wx.CLIP_CHILDREN
示例
window = wx.Frame(None, -1, “Hello”, pos = (10,10), size = (300,200),
style = wxDEFAULT_FRAME_STYLE, name = "frame")
9)事件术语
事件(event):在你的应用程序期间发生的事情,它要求有一个响应。
事件对象(event object):在wxPython中,它具体代表一个事件,其中包括了事件的数据等属性。它是类wx.Event或其子类的实例,子类如wx.CommandEvent和wx.MouseEvent。
事件类型(event type):wxPython分配给每个事件对象的一个整数ID。事件类型给出了关于该事件本身更多的信息。例如,wx.MouseEvent的事件类型标识了该事件是一个鼠标单击还是一个鼠标移动。
事件源(event source):任何wxPython对象都能产生事件。例如按钮、菜单、列表框和任何别的窗口部件。
事件驱动(event-driven):一个程序结构,它的大部分时间花在等待或响应事件上。
事件队列(event queue):已发生的但未处理的事件的一个列表。
事件处理器(event handler):响应事件时所调用的函数或方法。也称作处理器函数或处理器方法。
事件绑定器(event binder):一个封装了特定窗口部件,特定事件类型和一个事件处理器的wxPython对象。为了被调用,所有事件处理器必须用一个事件绑定器注册。
wx.EvtHandler:一个wxPython类,它允许它的实例在一个特定类型,一个事件源,和一个事件处理器之间创建绑定。注意,这个类与先前定义的事件处理函数或方法不是同一个东西。
(3)
第一次接触到wxpython,在网上找到一个简单的界面显示代码,复制到spyder3编辑中进行运行出现错误,(“module 'wx' has no attributte 'App'”),但在python3.6的IDLE编辑器上运行没有错误。具体程序如下:
import wx
app = wx.App()
frame = wx.Frame(None,title="my GUI")
frame.Show(1)
app.MainLoop()
于是在网上找到一些解决方法:
1)wx.py 文件名与插件wx 重名了;【命名py脚本时,不要与python预留字,模块名等相同;删除该库的.pyc文件(因为py脚本每次运行时均会生成.pyc文件;在已经生成.pyc文件的情况下,若代码不更新,运行时依旧会走pyc,所以要删除.pyc文件),重新运行代码;或者找一个可以运行代码的环境,拷贝替换当前机器的.pyc文件即可
解决:
把wx.py 改成 editor.py 执行成功弹出一个文本框,如附件截图:
D:\ProgramFiles64\Anaconda36\Lib\site-packages\IPython\terminal\pt_inputhooks\wx.py文件修改为editor.py,再执行。】
2)有的说是版本问题;
我按方法1修改了之后,还是没有成功,后来我将spyder重启,并且所有设置恢复默认之后,再执行又没有错误,具体原因在哪里我还是没有搞清楚。
下面我们来实现简单界面设计:
最小的wxpython程序,叫它hello world程序吧。功能就是产生一个窗口,就像是我们VC中新建的一个单文档的MFC类似,不过没有菜单什么的,只有一个框架窗口。其实严格来说,wxpython不叫这个为窗口,而是“frame”。实现代码有如下几种:
一>import wx
app = wx.PySimpleApp()
frame = wx.Frame(None, -1, "Hello World")
frame.Show()
app.MainLoop()
二>import wx
app = wx.App()
frame = wx.Frame(None, -1, "Hello World")
frame.Show()
app.MainLoop()
三>import wx
class MyApp(wx.App):
def OnInit(self):
frame=wx.Frame(parent=None,title='Hello wxpython')
frame.Show()
return True
app=MyApp()
app.MainLoop()
【下面部分转载博主:http://blog.sina.com.cn/s/blog_4b5039210100eykc.html】
可以看到,frame上面什么都没有。但所谓麻雀虽小,五脏俱全,从这个最小的程序我们就能看出一个wxpython程序都包含哪些东西:
1 导入wxpython库,或者里面的方法( import wx)
2 创建一个应用类的子类(继承于wxpython中的App类,class MyApp(wx.App):)
3 定义应用子类初始化方法(OnInit())
4 创建应用类的实例
5 进入应用类的消息循环 MainLoop
我们主要看一下,应用类的OnInit函数,在这个初始化方法中,我们生成了一个wx.frame对象的一个实例,因为这个程序比较简单,所以这个过程放到了OnInit方法中,一般情况下,我们都是定义一个继承于wx..Frame的子类(类似于MyApp一样),这个我们在以后会经常看到。
还有一点,我们在App类初始化没有调用__init__()这个方法,这意味着我们这个子类创建的过程中,按照类的继承性,这个方法会被自动调用。当然我们可以重新定义这个方法,但是一定要在子类中调用一下基类的__init__()方法。例如:
class App(wx.App):
def __init__(self):
wx.App.__init__(self)
#Do something here.....
最后创建应用类实例和进入消息循环和Tkinter差不多,就不说了。
上面例子只是为了说明wxpython的基本用法,但是那个代码其实扩展性很差,那么,作为一般wxpython程序应该怎么写呢?我们看下面的代码
#!/usr/bin/env Python
“”” hello.py is a starting point for a wxpython program”””
import wx
class Frame(wx.Frame):
pass
class App(wx.App):
def OnInit(self):
self.frame=Frame(parent=None,title='Hello wxpython')
self.frame.Show()
self.SetTopWindow(self.frame)
return True
if __name__=='__main__':
app=App()
app.MainLoop()
第一行是注释行,在windows中不是必须的,但是在linux中需要有,它告诉操作系统python解释器在什么地方,有了这个以后,我们就可以在linux命令行里直接输入文件名运行了。虽然windows中这个不是必须的,但是为了兼容性跨平台,这个一般还是要有的。
第二行的三引号所夹内容就不说了。
下面第一个类是继承于wx..Frame的frame类。这里我们什么没做,其实在这里我们可以做很多事,比如创建一些组件(按钮,文本框等待),这样把frame单独拿出来,为了使程序更清晰可读。
第二个类是继承于wx..App的App类。和第一个程序类似,只不过这里的frame换成了调用Frame,实例化得对象。
self.SetTopWindow(self.frame),这个其实是把self.frame作为了主frame,因为一个程序中可能会有多个frame。通过这个可以设置哪个frame是最顶层的主frame。
最后的if语句就是这个程序的入口。
下面,我们把上面的例子稍微扩充一点。
#!/usr/bin/env python
""" Hello,wxPython program."""
import wx #import the wxPackage
class Frame(wx.Frame):
"""Frame class that display an image."""
def __init__(self,image,parent=None,id=-1,
pos=wx.DefaultPosition,
title='Hello wxPython'):
temp=image.ConvertToBitmap() #Displaying the image
size=temp.GetWidth(),temp.GetHeight()
wx.Frame.__init__(self,parent,id,title,pos,size)
self.bmp=wx.StaticBitmap(parent=self,bitmap=temp)
class App(wx.App):
"""Application class."""
def OnInit(self):
image=wx.Image('wxpython.jpg',wx.BITMAP_TYPE_JPEG)
self.frame=Frame(image)
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def main():
app=App()
app.MainLoop()
if __name__=='__main__':
main()
实现是在frame上显示一张照片。结果为:
(4)
简介:
wxFormBuilder 是一个基于 wxWidgets 的 UI 设计的快速开发工具。
红线圈起部分是:wxFormBuilder使用拖拽方式添加控件、按钮和其他功能事件等,当界面设计完成之后,它可以自动生成C++、python、PHP、LUA和XRC等语言代码。
二 wxPython界面设计器——wxformbuilde的简单教程
【参考:http://blog.51cto.com/yuyongid/1717514 】
点赞
评论
分享
收藏
举报
关注
一键三连
wxpython中文文档
12-10
学习wxPython的中文word文档,供大家参考
相关推荐
...使用wxPython打造自己的印象笔记(4)wxFormBuilder使...
5-9
使用wxPython开发GUI应用,也有相应的可视化设计工具,常见的wxGlade和wxFormBuilder,这两种工具我都用过,后者比较好用一些,接下来就来介绍一下wxFormBuilder的使用方法。 安装好了以后,打开wxFormBuilder,如图所示。为了便于说明,我把界面...
使用wxPython和wxFormBuilder构建GUI界面_蓑笠翁2020的...
5-4
wxPython安装 pip install wxPython 1 验证: importwx 1 注意不是import wxPython… wxFormBuilder安装 地址:https://github.com/wxFormBuilder/wxFormBuilder/releases 这个工具可以支持可视化拖放控件,修改属性,绑定事件处理函数,还可以直接...
wxFormBuilder_构建界面的一个简单实例
05-06
wxFormBuilder_构建界面的一个简单实例,我用python写的一个单词查询软件的界面,该界面是用时WxForm软件直接制作的,可以转为c++,py等代码的界面,使用较为简单,可以作为使用该软件的一个demo吧
wxFormBuilder_v3.9.0.exe.zip
04-28
wxFormBuilder v3.9.0的官方下载包,官方网址为https://github.com/wxFormBuilder/wxFormBuilder/releases/download/v3.9.0/wxFormBuilder_v3.9.0.exe。Github资源国内下载实在太慢,分享到这里供大家参考。
...布局,可视化wxPython GUI构建工具wxFormBuilder介绍...
5-22
已知有这些缺点,对于构建稍微复杂一点的GUI界面,使用tkinter开发起来会比较费劲。基于此原因,重新开始学习wxPython,并基于wxFormBuilder IDE工具开发GUI界面,后者在完成GUI界面布局之后可以自动生成python代码。你只要在生成的python代码基础上,...
...使用wxPython打造自己的印象笔记(4)wxFormBuilder使...
5-10
使用wxPython开发GUI应用,也有相应的可视化设计工具,常见的wxGlade和wxFormBuilder,这两种工具我都用过,后者比较好用一些,接下来就来介绍一下wxFormBuilder的使用方法。 首先去GitHub上面下载对应的安装包,链接是https://github.com/wxForm...
wxFormBuilder
11-07
wxFormBuilder是一款还算不错的编程工具,你可以使用wxFormBuilder来设计好界面,生成XRC文件,当然不想给别人看到xrc文件的内容也可以用工具编译为二进制文件,参考wx.chm文档吧。之后程序载入界面再绑定行为很优雅和高效。wxFormBuilder设计好之后按f5直接看运行效果很赞。
wxFormBuilder.7z 3.9 增加中文语言支持
06-15
wxFormBuilder 3.9 增加中文语言; 增加对 wxTreebook 和 wxToolbook 控件的支持;已添加版权说明文件
wxpython_GUI学习笔记(2)——认识wxpython_panrenlong...
5-22
和Python语言与wxWidgets GUI工具库一样,wxPython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它的源代码,或者贡献补丁,增加功能。 wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持...
...界面生成器 wxFormBuilder 的入门使用(wxPython的界...
5-26
环境,Win10,python3.7.3,wxPython 4.0.4,wxFormBuilder 3.9 1、准备一个窗体。 点击wxformbuilder上方的标签“forms”,并点击标签下方的第一个类似窗体的图标“Frame” 然后,下面就会出现一个窗体。但是现在还不能直接往窗体上添加...
wxFormBuilder摸索--小白上手--做一个编辑器
caiza3491的博客
2万+
前言wxFormbuilder的文章非常少,也没有一个官方指南,非常坑爹。不过网络上有很多大神,参考了一下,然后自己再试试,页算是能摸索出用法。wxFormbuilder只能设计布局,事件只能链接一个名字,具体的要导出来脚本之后,在主脚本继承之后,再写。参考了以下两篇文章:http://www.cnblogs.com/hester/p/4696355.html 做一个编辑器http://blog....
使用wxFormBuilder创建wxpython窗口程序 简单
weixin_33595571的博客
3024
1.在wxFormBuilder中创建好窗口。 2.保存my_win.py代码 # -*- coding: utf-8 -*- ########################################################################### ## Python code generated with wxFormBuilder (version Jun ...
wxPython界面设计器——wxformbuilde的简单教程_njit_p...
5-17
前段时间学习了wxPython基本使用方法,教程都是直接使用手写代码去做生成界面的。后来开始做项目,发现这样的手写代码做出来的界面不止丑陋,而且效率低下。 于是,在网上搜索到这个可以给wxPython生成界面的代码的设计器——wxformbuilde。但,...
wxpython界面设计工具_wxformbuilder界面设计工具入门与进阶.pdf
5-28
/apps/wordpress/wxformbuilder/downloads/ 1 Base64 2Base64 UI / UI UI wxPython Sizersizer wxFormBuilder 2 2 WXFORMBUILDER wxFormBuilder FramePanelDialogFormsFrame wxFormBuilder wysiwyg IDEFrameFrame ...
Python界面生成器wxFormBuilder简单使用入门教程
Thanours的博客
2万+
python的桌面UI设计和处理,使用wxPython + wxFromBuilder是一个相对简单的方案。 1.下载 用pip install wxpython下载最新的wxPython。 2.下载wxfrombuilder wxFormBuilder下载链接,这个是直接用来拖拽用的。 3.打开wxformbuilder, 1.先点forms里面的Frame,开始的时候必...
wxFormBuilder_v3.5.1可视化图形界面设计工具
11-06
可视化的界面设计工具wxFormBuilder是一个开源,跨平台的所见即所得的图形用户界面生成器,可以翻译wxWidget GUI设计成C++,Python和PHP或XML代码格式。
Python 界面生成器 wxFormBuilder 的入门使用(wxPython的界面设计工具的初学笔记)...
weixin_30674525的博客
1230
环境,Win10,python3.7.3,wxPython 4.0.4,wxFormBuilder 3.9 1、准备一个窗体。 点击wxformbuilder上方的标签“forms”,并点击标签下方的第一个类似窗体的图标“Frame” 然后,下面就会出现一个窗体。但是现在还不能直接往窗体上添加各种控件。咱们还需要给窗体添加布局器BoxSizer。 2、添加布局器 点击wxformbu...
wxFormBuilder V3.9界面编辑工具.zip
09-03
软件介绍: wxFormBuilder 3.9是一款界面编辑工具,用于生成跨平台编译代码,能够快速搭建GUI开发环境。快速生成C ,python, Lua 等代码和 XRC 资源文件,搭建高效的带有GUI界面编辑器的开发环境。
wxWidgets学习笔记(二):使用wxFormBuilder、wxWidgets和Code::Blocks创建GUI程序
CharmingSun的博客
6523
一、开发环境 操作系统:Fedora 23 集成开发环境:Code::Blocks 16.01 G++版本:5.3.1 GTK+版本:2.24.30(使用命令dnf install gtk2 gtk2-devel gtk2-devel-docs安装) wxWidgets版本:3.1.0(解压源码包后进入顶层目录依次输入./configure、make、make install三条命令) wxForm
Python界面生成器wxFormBuilder简单使用(wxPython)
疯子也是猖狂
1432
最近在看python的GUI 然后对比了几个框架后还是选择用wxpython,因为比较简单,个人也是个python新手 1.下载 用pip install wxpython下载最新的wxPython。 下载的特别慢而且貌似还会出错,所以我是直接下载的包,然后安装。 下载完以后复制到\Scripts下 然后进行安装 附上下载链接 链接:https://pan.baidu....
wxWidgets界面开发工具wxFormBuilder的使用
weixin_30340353的博客
529
wxFormBuilder下载地址:http://download.csdn.net/detail/lsmallstop/7013401 安装完成后,打开wxFormBuilder,可以在左侧工程子窗口里看到已经有一个默认的MyProject1了,我们在里面添加一个Dialog,一个wxStaticText和一个wxButton。 步骤如下: 1.添加一对话框。 ...
wxFormBuilder(python图形界面设计工具)安装与使用教程
tianjing0517的博客
7443
wxFormBuilder简介 wxFormBuilder 是一个基于 wxWidgets 的 UI 设计的快速开发工具。 wxFormBuilder安装 官网下载安装包 https://sourceforge.net/projects/wxformbuilder/ 进行安装wxFormBuilder 最后点击next,就完成安装啦! wxFormBuilder的使用 首先要创建一...
wxpython可视化_wxPython GUI生成器工具
weixin_39980347的博客
27
通过手动编写创建一个漂亮的GUI可能很乏味。一个可视化的GUI设计工具总是很方便。许多针对wxPython的GUI开发IDE都可用。以下是其中一些 -wxFormBuilderwxDesignerwxGladeBoaConstructorgui2pywxFormBuilder 是一款开源的跨平台WYSIWYG GUI构建器,可将wxWidget GUI设计转换为C++,Python,PHP或XML...
wxformbuilder软件制作gui界面教程
qq_41716668的博客
1701
Wxformbuilder使用教程 1)制作一个界面首先得有个框架,首先确定一个什么样的框架,wx基本给定了frame(框
转载博主麦兜搞IT
:http://blog.sina.com.cn/s/blog_4b5039210100ez54.html】
因为笔记主要是摘自《wxpython in action》,很多名词我怕翻译不准,就直接用英文原文来代替,就像今天的top-level window object 和subwindow object ,这里暂时叫顶层窗口对象和子窗口对象。
首先看一下wxpython的输出重定向,关于什么是标准输入输出和其对应的重定向,可以参看http://blog.sina.com.cn/s/blog_4b5039210100dtam.html或者到网上查找相关内容。下面以一个例子来说明。(这里虽然是讲重定向,但是我们的用意是看看一个标准的wxpython程序时怎么运行的,它的运行顺序是什么)
import wx
import sys
class Frame(wx.Frame):
def __init__(self,parent,id,title):
print "Frame__init__"
wx.Frame.__init__(self,parent,id,title)
class App(wx.App):
def __init__(self,redirect=True,filename=None):
print "App__init__"
wx.App.__init__(self,redirect,filename)
def OnInit(self):
print "OnInit"
self.frame=Frame(parent=None,id=-1,title='Startup')
self.frame.Show()
self.SetTopWindow(self.frame)
print >>sys.stderr,"A pretend error message"
return True
def OnExit(self):
print "OnExit"
if __name__=='__main__':
app=App(redirect=True)
print "before MainLoop"
app.MainLoop()
print "after MainLoop"
运行结果,出现两个窗口,一个是wxpython的frame,另一个就是我们把标准输出重定向到了一个wxpython窗口
并且在命令行会出现下面的结果:
其中第一个是在frame产生前打印的,第二行是在我们关闭frame窗口后打印的。
从这个程序,我们基本能看出整个程序的运行顺序和步骤。
首先程序要运行的是建立应用类的实例app=App(redirect=True),然后就要进行这个子类的实现,而App是继承于wx..App,然后就自然要用到父类的__init__()方法,所以App__init__首先被打印出来,因为此时frame还没有产生,所以App__init__被打印在了命令行。然后进入OnInit方法,此时frame产生,然后就是Frame方法,然后进入MainLoop循环,结束以后,最后打印after MainLoop。
Top-level window object
顶层窗口对象,就是不被任何其他组件包含的对象,相反,顶层窗口对象可以包含其他的组件,是我们程序的主窗口。一个应用必须至少一个top-level window object,它通常是wx.Frame的一个子类,也可以使wx.Dialog 的子类。
通常我们用SetTopWindow()来设置某个frame或别的为top-level window object ,如果我们不设置,那么系统默认第一个frame为top-level window object
Wx.Frame是所有frame对象的父类,下面简单看一下这个类。如何创建一个frame对象,前面已经说过,可以直接用wx.Frame()实现,或者先定义一个它的子类,再由子类来定义frame。
wx.Frame(parent,id=-1,title='',pos=wx.DefaultPostion,size=wx.DefaultSize,
style=wx.DEFAULT_FRAME_STYLE,name='frame')
下面看看这几个参数:
Parent:当前窗口的父窗口,如果当前窗口时top-level window的话,则parent=None,如果不是顶层窗口,则它的值为所属frame的名字
Id:一个新窗口的id,一般我们都设为-1,这样wxpython会自动产生一个id。
Title:窗口的标题,在标题栏上显示的内容
Pos:它的值是一个wx.Point的对象,是一个元组,表示了窗口创建时的位置坐标
Size:它的值是一个wx.Size的对象,也是一个元组,表示了窗口的大小。
Style:窗口的风格,窗口有多种风格,我们可以用(|)来组合想要的风格,下面就详细看一下。(熟悉MFC的朋友应该觉得很眼熟)
1. wx.CAPTION 增加一个title bar to the frame,用来显示title这个属性
2. wx.CLOSE_BOX 增加一个关闭窗口的按钮
3. wx.DEFAULT_FRAME_STYLE 这是个默认窗口风格,也是我们经常使用的,它其实是这样定义的:wx.MAXIMIZE_BOX| wx.MINIMIZE_BOX| wx.RESIZE_BORDER|wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX
4. wx.FRAME_SHAPED
5. wx.FRAME_TOOL_WINDOW
6. wx.MAXIMIZE_BOX
7. wx.MINIMIZE_BOX
8. wx.RESIZE_BORDER
9. wx.SIMPLE_BORDER
10. wx_SYSTEM_MENU
下面是几个实例:
默认的
无最大化最小化按钮,边界不能拖动
可以多尝试集中风格试试。