暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Tutorialspoint WxPython 教程

原创 yBmZlQzJ 2023-08-14
674

Tutorialspoint WxPython 教程

来源:易百教程

wxPython开发环境安装 - WxPython教程™

在Windows上安装

预编译的二进制在Windows操作系统(32位和64位)可在页面: http://www.wxpython.org/download.php 下载。最新版本的安装程序是 − wxPython3.0-win64-3.0.2.0-py27.exewxPython3.0-win64-3.0.2.0-py27.exe 对应操作系统版本。

wxPython的示例以及 wxWidgets 文档也可以在同一页上下载。wxPython3.0-win32-docs-demos.exe

在Linux系统上安装

wxPython的二进制文件很多Linux发行版,可以在各自的资料库中找到。相应的包管理器将需要下载和安装。例如,在Debian Linux上,下面的命令应该能够用来安装 wxPython。

sudo apt-get install python-wxgtk3.0

在MacOS系统上安装

可在官方网站的下载页面上下载预编译的二进制文件,在MacOS的磁盘映像的形式来安装文件。



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython开发环境安装

wxPython入门(Hello World) - WxPython教程™

一个简单的GUI应用程序显示Hello World消息使用以下构建步骤 −

  • 导入 wx 模块
  • 定义应用程序类的一个对象
  • 创建一个顶层窗口的 wx.Frame 类的对象。 给出构造标题和尺寸参数。
  • 虽然其他控件可以在Frame对象加入,但它们的布局无法管理。因此,把一个Panel对象到框架。
  • 添加一个静态文本对象,以显示 ‘Hello World’在窗口内的任意位置。
  • 通过show()方法激活框架窗口。
  • 输入应用程序对象的主事件循环。

创建一个 HelloWord.py 代码,如下:

import wx

app = wx.App()
window = wx.Frame(None, title = "wxPython - www.yiibai.com", size = (400,300))
panel = wx.Panel(window)
label = wx.StaticText(panel, label = "Hello World", pos = (100,100))
window.Show(True)
app.MainLoop() 

上面的代码产生下面的输出 −

0b656fb913786ebd4cb77ccf17b55f84.jpg

wxFrame对象是最常用的顶层窗口。它是从 wxWindow 类派生的。 frame其大小和位置可以由用户改变的一种窗口。它有一个标题栏和控制按钮。如果需要的话,其他组件,如菜单栏,工具栏和状态栏等都可以启用。wxFrame窗口可以包含任何帧(frame)而不只是一个对话或另一个帧(frame)。



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython入门(Hello World)

wxPython GUI构建工具wxFormBuilder - WxPython教程™

如果要创建一个漂亮的图形用户界面通过手工编码可能是很乏味的。一个可视化的界面设计工具是得心应手的了。有许多可针对wxPython的GUI开发的IDE。以下是其中的一些 −

  • wxFormBuilder
  • wxDesigner
  • wxGlade
  • BoaConstructor
  • gui2py

wxFormBuilder是一个开源,跨平台的所见即所得的图形用户界面生成器,可以翻译wxWidget GUI设计成C++,Python和PHP或XML格式。 简要介绍 wxFormBuilder 的用法是在这里给出。

首先 wxFormBuilder 的所有最新版本需要从http://sourceforge.net/projects/wxformbuilder/.下载和从安装。在打开应用程序时,出现空白的灰色区域为新项目的中心。

给该项目一个合适的名字,并选择Python作为代码生成语言。 在对象属性窗口,如图下图 −
ae38f0da3ca585af60a0dfa470099177.jpg
然后从组件面板“表单”选项卡中,选择画面。
2a18e0b3751806b35ff3d8fb33b8b9cf.jpg
从“Layouts”选项卡中添加一个垂直wxBoxSizer。
在框中添加必要的控制并使用合适的标题。这里,一个静态文本(标签),两个TextCtrl对象(文本框)和一个wxButton对象相加。该框架看起来像下面的图片 -
f8a03325009b4afc4b460e46ac21be87.jpg
启用扩展和拉伸在这三个控件。 在对象的属性为wxButton对象指定一个函数 findsquare()来处理 OnButtonClick事件。

保存该项目,然后按F8键生成 Python代码开发的GUI。让生成的文件命名为Demo.py

在可执行Python脚本,导入demo.py并定义FindSquare()函数。声明Application对象并启动主事件循环。以下是可执行代码 -

import wx

#import the newly created GUI file
import demo
class CalcFrame(demo.MyFrame1):
def __init__(self,parent):
demo.MyFrame1.__init__(self,parent)

def FindSquare(self,event):
num = int(self.m_textCtrl1.GetValue())
self.m_textCtrl2.SetValue (str(num*num))

app = wx.App(False)
frame = CalcFrame(None)
frame.Show(True)
#start the applications
app.MainLoop()  

上面的代码产生下面的输出 −
5d98906d8f8dceb468b6b9c49fe89221.jpg



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython GUI构建工具wxFormBuilder

wxPython Frame类 - WxPython教程™

wx.Frame类不带参数的默认构造函数。它也有一个重载的构造函数的参数如下 -

Wx.Frame (parent, id, title, pos, size, style, name)

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")

wx.Frame类成员函数

S.N.

函数 & 描述

1

CreateStatusBar()

创建窗口底部状态栏

2

CreateToolBar()

创建工具栏在窗口的顶部或左侧

3

GetMenuBar()

获取引用菜单栏

4

GetStatusBar()

获取引用状态栏

5

SetMenuBar()

在帧(frame)显示菜单栏对象

6

setStatusBar()

关联状态栏对象到框架(frame)

7

SetToolBar()

关联工具栏对象到框架(frame)

8

SetStatusText()

在状态栏上显示的文字

9

Create()

创建有提供参数的框架

10

Centre()

放置该帧(frame)显示在中心

11

SetPosition()

放置帧(frame)在给定的屏幕坐标

12

SetSize()

由给定尺寸调整框架(frame)大小

13

SetTitle()

插入给定文本到标题栏

wx.Frame 事件绑定器

S.N.

事件 & 描述

1

EVT_CLOSE

当帧被用户关闭/或以编程方式点击关闭按钮

2

EVT_MENU_OPEN

当一个菜单即将打开

3

EVT_MENU_CLOSE

当一个菜单刚刚关闭

4

EVT_MENU_HIGHLIGHT

当指定id菜单项突显



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython Frame类

wxPython Panel类 - WxPython教程™

小构件,如按钮,文本框等被放置在面板窗口。 wx.Panel类通常是被放在一个wxFrame对象中。这个类也继承自wxWindow类。

虽然控件可以手动放置在面板指定屏幕坐标的位置,建议使用合适的布局方案,称为大小测定器(sizer)在wxPython中,为更好地控制布局和解决调整大小的问题。

在wxPanel构造,父参数是wx.Frame对象,在面板中放置。id参数的默认值是wx.ID_ANY,而默认的样式参数是wxTAB_TRAVERSAL。

wxPython的API具有以下大小测定器(sizers),使用该控件被添加到面板对象 -

S.N.

Sizers & 描述

1

wx.BoxSizer

窗口小部件布置成垂直或水平框

2

wx.StaticBoxSizer

添加staticbox围绕测定器(sizer)

3

wx.GridSizer

每个单元增加一个控件在网格的大小相等的单元

4

wx.FlexGridSizer

控件加入单元网格可以占据多个单元格

5

wx.GridBagSizer

对照明确地定位在网格和横跨多个行和/或列

Sizer对象为使用wxPanel类的SetSizer ()方法在面板的布局管理器应用。

wx.Panel.SetSizer(wx.???Sizer())

面板对象按顺序添加到顶层帧(frame)。



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython Panel类

wxPython StaticText类 - WxPython教程™

在GUI接口中有一个重要东西是一个标签,一行或多行的只读文本。它通常放置在框架(frame)上或者作为另一插件的标识符或作为信息串。

在wxPython中,wx.StaticText类对象提供了一个控件持有这样的只读文本。它被动控制,因为不产生任何事件。Wx.StaticText类的构造函数需要下列的参数-

Wx.StaticText(parent, id, label, position, size, style)

预定义的样式枚举器 -

wx.ALIGN_LEFT

控制标签的大小及对齐

wx.ALIGN_RIGHT

wx.ALIGN_CENTER

wx.ST_NO_AUTORESIZE

防止标签的自动调整大小

wx.ST_ELLIPSIZE_START

省略号(...)显示在开始,中间或结尾,如果文本的大小大于标签尺寸

wx.ST_ELLIPSIZE_MIDDLE

wx.ST_ELLIPSIZE_END

StaticText类的上述特征表现在以面的例子。三个StaticText对象被放置在一个垂直的盒子大小测定器(sizer)。

所述第一对象中心对准多行文本。第二个标签的文本设置为环绕超过200像素。第三标签显示省略号(...)在文本的中间。

为了设置标签的字体,首先创建一个字体对象。

Wx.Font(pointsize, fontfamily, fontstyle, fontweight)

下面给出 FontFamily 的最常用的参数。fontFamily 参数取值为-

S.N.

参数 & 描述

1

Wx.FONTSTYLE_NORMAL

字体绘制不使用倾斜

2

wx.FONTSTYLE_ITALIC

字体是斜体

3

wx.FONTSTYLE_SLANT

字体是倾斜的,但以罗马风格形式

FontWeight参数-

S.N.

参数 & 描述

1

Wx.FONTWEIGHT_NORMAL

普通字体

2

wx.FONTWEIGHT_LIGHT

高亮字体

3

wx.FONTWEIGHT_BOLD

粗体

完整的代码列表 -

import wx

class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (600,200))
panel = wx.Panel(self)
box = wx.BoxSizer(wx.VERTICAL)
lbl = wx.StaticText(panel,-1,style = wx.ALIGN_CENTER)

txt1 = "Python GUI development"
txt2 = "using wxPython"
txt3 = " Python port of wxWidget "
txt = txt1+"\n"+txt2+"\n"+txt3

font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL)
lbl.SetFont(font)
lbl.SetLabel(txt)

box.Add(lbl,0,wx.ALIGN_CENTER)
lblwrap = wx.StaticText(panel,-1,style = wx.ALIGN_RIGHT)
txt = txt1+txt2+txt3

lblwrap.SetLabel(txt)
lblwrap.Wrap(200)
box.Add(lblwrap,0,wx.ALIGN_LEFT)

lbl1 = wx.StaticText(panel,-1, style = wx.ALIGN_LEFT | wx.ST_ELLIPSIZE_MIDDLE)
lbl1.SetLabel(txt)
lbl1.SetForegroundColour((255,0,0))
lbl1.SetBackgroundColour((0,0,0))

font = self.GetFont()
font.SetTutorialsSize(20)
lbl1.SetFont(font)

box.Add(lbl1,0,wx.ALIGN_LEFT)
panel.SetSizer(box)
self.Centre()
self.Show()

app = wx.App()
Mywin(None, 'StaticText demo')
app.MainLoop()

上面的代码产生下面的输出 -

643ee16042afd34db26bce8d0e634cbf.jpg



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython StaticText类

wxPython TextCtrl类 - WxPython教程™

在GUI接口中,输入是最常见的是在一个文本框收集,用户可以使用键盘键入。 在wxPython中,wx.TextCtrl类的一个对象就是用于这一目的。它可以显示文本和编辑的控制。 TextCtrl小部件可以是单行,多行或密码字段。TextCtrl类的构造函数形式如下 -

wx.TextCtrl(parent, id, value, pos, size, style) 

样式(style)参数接受一个或多个常量,如下列表 −

S.N.

参数&描述

1

wx.TE_MULTILINE

文本控件允许多行。如果未指定该样式(style),换行字符不应该在控件值中使用。

2

wx.TE_PASSWORD

文本将回显为星号

3

wx.TE_READONLY

文本将不可编辑

4

wxTE_LEFT

在控件中的文本将左对齐(默认)

5

wxTE_CENTRE

在控件中的文本将居中对齐

6

wxTE_RIGHT

在控件中的文本将居右对齐

wx.TextCtrl类的重要方法。

下面的事件绑定器负责处理事件相关的TextCtrl框中输入文字 -

S.N.

事件&描述

1

EVT_TEXT

响应变化的文本框的内容,或者通过手动键入,或以编程方式

2

EVT_TEXT_ENTER

调用相关的处理程序当Enter键在文本框中按下

3

EVT_TEXT_MAXLEN

只要文本长度进入触发相关处理程序达到SetMaxLength()函数的值

实例

在下面的例子中,具有不同属性的 wx.TextCtrl 类的四个对象被放置在面板上。

self.t1 = wx.TextCtrl(panel)
self.t2 = wx.TextCtrl(panel,style = wx.TE_PASSWORD)
self.t3 = wx.TextCtrl(panel,size = (200,100),style = wx.TE_MULTILINE)
self.t4 = wx.TextCtrl ( panel, value = "ReadOnly Text",
style = wx.TE_READONLY | wx.TE_CENTER )

虽然首先是一个普通的文本框,第二个是一个密码字段。第三个是多行文本框,而最后一个文本框是不可编辑的。

第一个框 EVT_TEXT 绑定器触发 OnKeyTyped()方法可以处理每个击键。第二个框它的最大长度为5。一旦用户试图输入超过500个字符,EVT_TEXT_MAXLEN 绑定器发送运行OnMaxLen()函数。多行文本框响应回车键按下,因为EVT_TEXT_ENTER绑定器。

TextCtr.py 完整的代码如下 -

import wx

class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (350,250))

panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)

hbox1 = wx.BoxSizer(wx.HORIZONTAL)
l1 = wx.StaticText(panel, -1, "文本域")

hbox1.Add(l1, 1, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
self.t1 = wx.TextCtrl(panel)

hbox1.Add(self.t1,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
self.t1.Bind(wx.EVT_TEXT,self.OnKeyTyped)
vbox.Add(hbox1)

hbox2 = wx.BoxSizer(wx.HORIZONTAL)
l2 = wx.StaticText(panel, -1, "密码文本")

hbox2.Add(l2, 1, wx.ALIGN_LEFT|wx.ALL,5)
self.t2 = wx.TextCtrl(panel,style = wx.TE_PASSWORD)
self.t2.SetMaxLength(5)

hbox2.Add(self.t2,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
vbox.Add(hbox2)
self.t2.Bind(wx.EVT_TEXT_MAXLEN,self.OnMaxLen)

hbox3 = wx.BoxSizer(wx.HORIZONTAL)
l3 = wx.StaticText(panel, -1, "多行文本")

hbox3.Add(l3,1, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
self.t3 = wx.TextCtrl(panel,size = (200,100),style = wx.TE_MULTILINE)

hbox3.Add(self.t3,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
vbox.Add(hbox3)
self.t3.Bind(wx.EVT_TEXT_ENTER,self.OnEnterPressed)

hbox4 = wx.BoxSizer(wx.HORIZONTAL)
l4 = wx.StaticText(panel, -1, "只读取文本")

hbox4.Add(l4, 1, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
self.t4 = wx.TextCtrl(panel, value = "只读文本",style = wx.TE_READONLY|wx.TE_CENTER)

hbox4.Add(self.t4,1,wx.EXPAND|wx.ALIGN_LEFT|wx.ALL,5)
vbox.Add(hbox4)
panel.SetSizer(vbox)

self.Centre()
self.Show()
self.Fit()

def OnKeyTyped(self, event):
print event.GetString()

def OnEnterPressed(self,event):
print "Enter pressed"

def OnMaxLen(self,event):
print "Maximum length reached"

app = wx.App()
Mywin(None, '
TextCtrl实例-
www.yiibai.com
')

app.MainLoop()

上面的代码产生下面的输出 -

69e3b549bd339abc4de3896e7612f5fc.jpg

本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython TextCtrl类

wxPython RadioButton & RadioBox类 - WxPython教程™

单选按钮通常表现为一组用户从多种可选按钮里选择一个选项。每个按钮,wx.RadioButton类的一个对象会在旁边带着一个圆形按钮文本标签。

为了创建一组相互可选择的按钮,首先wxRadioButton对象的样式参数设置为wx.RB_GROUP。后继按钮对象会被添加到一组。

wxPython的API还包括wx.RadioBox类。它的对象提供了一个边框和标签组。组中的按钮可以水平或垂直布置。

wx.RadioButton构造看起来像 -

Wx.RadioButton(parent, id, label, pos, size, style) 

style参数仅用于该组中的第一个按钮。它的值是wx.RB_GROUP。对于组中的随后的按钮,wx.RB_SINGLE的style 参数可以任选地使用。

每任何组中的按钮被点击时 wx.RadioButton 事件绑定器 wx.EVT_RADIOBUTTON 触发相关的处理程序。

wx.RadioButton类的两种重要的方法是 SetValue() – 选择或取消选择按钮编程,和getValue() 如果选择一个按钮则返回 true,否则返回 false。

wx.RadioBox 则以相互排斥的按钮集合在一个静态框。该组中的每个按钮将其标签从列表对象作为'选择'wx.RadioBox构造函数的参数。

RadioBox按钮将在按行或列的方式逐步布局。对于构造的'style'参数的值应该是wx.RA_SPECIFY_ROWS或wx.RA_SPECIFY_COLS。行/列的数目是由'majordimensions'参数的值来决定。

wx.RadioBox构造函数的原型是 -

Wx.RadioBox(parent, id, label, pos, size, choices[], initialdimensions, style)

以下是wx.RadioBox类的重要方法 -

S.N.

方法 & 描述

1

GetSelection()

返回所选项目的索引

2

SetSelection()

选择编程项目

3

GetString()

返回选定项的标签

4

SetString()

分配标签到所选择的项目

5

Show()

显示或隐藏指定索引的项目

与wx.RadioBox对象关联的事件绑定是wx.EVT_RADIOBOX。关联的事件处理程序识别按钮的选择并处理它。

实例

下面的例子演示了如何使用RadioBox以及单选按钮。首先,三个单选按钮通过指定wx.RB_GROUP样式分组并放置在面板上。

self.rb1 = wx.RadioButton(pnl,11, label = 'Value A', pos = (10,10), style = wx.RB_GROUP)
self.rb2 = wx.RadioButton(pnl,22, label = 'Value B',pos = (10,40))
self.rb3 = wx.RadioButton(pnl,33, label = 'Value C',pos = (10,70))

在RadioBox,另一方面,从 lblList[]对象的读出标签按钮。

lblList = ['Value X', 'Value Y', 'Value Z']
self.rbox = wx.RadioBox(pnl,label = 'RadioBox', pos = (80,10), choices = lblList ,
majorDimension = 1, style = wx.RA_SPECIFY_ROWS)

两个事件绑定器,一个单选按钮组和其他的 RadioBox 被声明。

self.Bind(wx.EVT_RADIOBUTTON, self.OnRadiogroup)
self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox)

相应的事件处理程序确定所选择的按钮,并在控制台窗口中显示消息。

def OnRadiogroup(self, e):
rb = e.GetEventObject()
print rb.GetLabel(),' is clicked from Radio Group'

def onRadioBox(self,e):
print self.rbox.GetStringSelection(),' is clicked from Radio Box' 

RadioBoxAndRadioButton.py 完整的代码如下:

import wx

class Example(wx.Frame):

def __init__(self, parent, title):
super(Example, self).__init__(parent, title = title,size = (300,200))

self.InitUI()

def InitUI(self):
pnl = wx.Panel(self)

self.rb1 = wx.RadioButton(pnl,11, label = 'Value A',
pos = (10,10), style = wx.RB_GROUP)
self.rb2 = wx.RadioButton(pnl,22, label = 'Value B',pos = (10,40))
self.rb3 = wx.RadioButton(pnl,33, label = 'Value C',pos = (10,70))
self.Bind(wx.EVT_RADIOBUTTON, self.OnRadiogroup)

lblList = ['Value X', 'Value Y', 'Value Z']

self.rbox = wx.RadioBox(pnl, label = 'RadioBox', pos = (80,10), choices = lblList,
majorDimension = 1, style = wx.RA_SPECIFY_ROWS)
self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox)

self.Centre()
self.Show(True)

def OnRadiogroup(self, e):
rb = e.GetEventObject()
print rb.GetLabel(),' is clicked from Radio Group'

def onRadioBox(self,e):
print self.rbox.GetStringSelection(),' is clicked from Radio Box'

ex = wx.App()
Example(None,'
RadioButton & RadioBox - 
www.yiibai.com
')
ex.MainLoop()

上面的代码产生下面的输出 -

5b4069c495a90d8226958a124145a250.jpg

Value B is clicked from Radio Group

Value C is clicked from Radio Group

Value Y is clicked from Radio Box

Value X is clicked from Radio Box


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython RadioButton & RadioBox类

wxPython CheckBox类 - WxPython教程™

一个复选框显示一个小标记的矩形框。单击时,复选标记出现在矩形内,指示作出选择。 复选框优于单选按钮,当允许用户多选。在这种情况下,第三状态称为混合或不确定的状态,一般用在“不适用”情景。

通常情况下,一个复选框对象有两种状态(选中或未选中)。如果相应的参数将被赋予三态复选框也可以构造。

wx.CheckBox类的构造函数的参数如下 -

Wx.CheckBox(parent, id, label, pos, size, style)

以下样式参数值可以使用 -

S.N.

参数和说明

1

wx.CHK_2STATE

创建两个状态复选框。 这是默认值

2

wx.CHK_3STATE

创建三态复选框

3

wx.ALIGN_RIGHT

把一个盒子标签放在复选框的左侧

这个类有两个重要的方法 - GetState()返回true或false,取决于如果该复选框被选中或未选。SetValue()用于编程方式选择一个复选框。

wx.EVT_CHECKBOX是唯一的事件绑定可用。相关的事件处理程序将在每次框架上的任何复选框被选中或取消时调用。

实例

下面是一个简单的例子演示如何使用三个复选框。处理函数 OnChecked()识别对应的复选框,它负责事件并显示其状态。

CheckBox.py 完整源代码 −

import wx

class Example(wx.Frame):

def __init__(self, parent, title):
super(Example, self).__init__(parent, title = title,size = (300,200))

self.InitUI()

def InitUI(self):

pnl = wx.Panel(self)

self.cb1 = wx.CheckBox(pnl, label = 'Value A',pos = (10,10))
self.cb2 = wx.CheckBox(pnl, label = 'Value B',pos = (10,40))
self.cb3 = wx.CheckBox(pnl, label = 'Value C',pos = (10,70))

self.Bind(wx.EVT_CHECKBOX,self.onChecked)
self.Centre()
self.Show(True)

def onChecked(self, e):
cb = e.GetEventObject()
print cb.GetLabel(),' is clicked',cb.GetValue()

ex = wx.App()
Example(None,'CheckBox Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -
f37a6e52accbe0a162901909630bed39.jpg


A 被点击为 True

B 被点击为 True

C 被点击为 True

B 被点击为 False



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython CheckBox类

wxPython ComboBox & Choice类 - WxPython教程™

wx.ComboBox对象提供从项目选择列表。它可以被配置为一个下拉列表或永久性的显示。

从列表中选择的项目显示在文本字段中,默认情况下是可编辑的,但是可以在wx.CB_READONLY style 参数设置为只读。

wxPython API包含一个wx.Choice类,其目的也是一个下拉列表,是永久只读。

使用 wx.ComboBox 类构造函数的参数 −

Wx.ComboBox(parent, id, value, pos, size, choices[], style) 

value参数是要显示在组合框的文本框中的文本。 它是由 choices[] 集合中的项目进行填充。

下面的样式参数定义为 wx.ComboBox -

S.N.

参数和说明

1

wx.CB_SIMPLE

组合框与永久显示的列表

2

wx.CB_DROPDOWN

组合框与下拉列表

3

wx.CB_READONLY

选择的项目是不可编辑

4

wx.CB_SORT

列表显示按字母顺序

下表显示了常用wx.ComboBox类的方法 −

S.N.

方法和说明

1

GetCurrentSelection ()

返回被选中的项目

2

SetSelection()

将给定索引处的项设置为选中状态

3

GetString()

返回给定索引处的项目关联的字符串

4

SetString()

给定索引处更改项目的文本

5

SetValue()

设置一个字符串作为组合框文本显示在编辑字段中

6

GetValue()

返回组合框的文本字段的内容

7

FindString()

搜索列表中的给定的字符串

8

GetStringSelection()

获取当前所选项目的文本

事件绑定器生成此类的事件如下 -

S.N.

事件和说明

1

wx. COMBOBOX

当列表项目被选择

2

wx. EVT_TEXT

当组合框的文本发生变化

3

wx. EVT_COMBOBOX_DROPDOWN

当下拉列表

4

wx. EVT_COMBOBOX_CLOSEUP

当列表折叠起来

wx.Choice类的构造函数原型如下 −

wx.Choice(parent, id, pos, size, n, choices[], style) 

参数“n”代表字符串的数目使于选择列表的初始化。像组合框,项目被填充到 choices[]集合列表。

对于选择类,wx.CB_SORT为只有一个类型的参数定义。wx.EVT_CHOICE为只有一个事件绑定处理由该类发出的事件。

实例

下面的示例显示 wx.ComboBox 和 wx.Choice 的特点。这两个对象被放在一个垂直的盒子大小测定器(sizer)。这些项目用于填充languages[]列表的对象。

languages = ['C', 'C++', 'Python', 'Java', 'Perl']
self.combo = wx.ComboBox(panel,choices = languages)
self.choice = wx.Choice(panel,choices = languages)

事件绑定器EVT_COMBOBOX和EVT_CHOICE相应的对它们的事件处理。

self.combo.Bind(wx.EVT_COMBOBOX, self.OnCombo)
self.choice.Bind(wx.EVT_CHOICE, self.OnChoice)

下面的处理函数从标签的列表中显示所选项目。

def OnCombo(self, event):
self.label.SetLabel("selected "+ self.combo.GetValue() +" from Combobox")

def OnChoice(self,event):
self.label.SetLabel("selected "+ self.choice.
GetString( self.choice.GetSelection() ) +" from Choice")

完整的代码列表如下 -

import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (300,200))

panel = wx.Panel(self)
box = wx.BoxSizer(wx.VERTICAL)
self.label = wx.StaticText(panel,label = "Your choice:" ,style = wx.ALIGN_CENTRE)
box.Add(self.label, 0 , wx.EXPAND |wx.ALIGN_CENTER_HORIZONTAL |wx.ALL, 20)
cblbl = wx.StaticText(panel,label = "Combo box",style = wx.ALIGN_CENTRE)

box.Add(cblbl,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
languages = ['C', 'C++', 'Python', 'Java', 'Perl']
self.combo = wx.ComboBox(panel,choices = languages)

box.Add(self.combo,1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
chlbl = wx.StaticText(panel,label = "Choice control",style = wx.ALIGN_CENTRE)

box.Add(chlbl,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
self.choice = wx.Choice(panel,choices = languages)
box.Add(self.choice,1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)

box.AddStretchSpacer()
self.combo.Bind(wx.EVT_COMBOBOX, self.OnCombo)
self.choice.Bind(wx.EVT_CHOICE, self.OnChoice)

panel.SetSizer(box)
self.Centre()
self.Show()

def OnCombo(self, event):
self.label.SetLabel("You selected"+self.combo.GetValue()+" from Combobox")

def OnChoice(self,event):
self.label.SetLabel("You selected "+ self.choice.GetString
(self.choice.GetSelection())+" from Choice")

app = wx.App()
Mywin(None, 'ComboBox & Choice Demo - www.yiibai.com')
app.MainLoop()

上面的代码产生下面的输出 -

5bae8f6d97e82d7b51cce08291a98e52.jpg

本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython ComboBox & Choice类

wxPython Guage类 - WxPython教程™

进度条控件在wxPython中被称为测量仪(Gauge)。Wx.Gauge类对象表示垂直或水平条,其中以图形方式显示递增量。它通常用于展示像复制文件或安装软件的处理进程。

Wx.Gauge控件可以在确定的以及不确定模式中使用。当完成任何操作所需的时间可以被相当精确地确定,测量仪进度条显示已完成任务的百分比。然而如果在不确定模式,它只是表示该过程正在进行中。

在确定模式,进度位置会定期更新。在不确定模式,调用 Pulse() 函数将更新进度条。

Wx.Gauge类的构造函数的参数是必需的 -

wx.Gauge(parent, id, range, pos, size, style)

range 参数设置为表上的最大值。在不确定模式,则忽略此参数。

Gauge类可能的style参数 -

S.N.

参数和说明

1

wx.GA_HORIZONTAL

进度条的横向布局

2

wx.GA_VERTICAL

进度条的垂直布局

3

wx.GA_SMOOTH

平滑的进度条使用一个像素宽度的更新步骤

4

wx.GA_TEXT

显示当前值在百分比形式

此类一些的重要的方法列于下表中 −

S.N.

方法和说明

1

GetRange()

返回gauge的最大值

2

SetRange()

设置gauge的最大值

3

GetValue()

返回当gauge的值

4

SetValue()

以编程方式设置当前值

5

Pulse()

切换gauge到不确定模式

实例

在下面的例子中,水平Gauge对象是添加在垂直的盒子大小测定器(sizer)的面板中。

self.gauge = wx.Gauge(pnl, range = 20, size = (250, 25), style = wx.GA_HORIZONTAL)

也有它的点击事件与处理程序功能相关的按钮。

self.btn1 = wx.Button(pnl, label = "Start")
self.Bind(wx.EVT_BUTTON, self.OnStart, self.btn1)

处理函数 OnStart()每一秒后计算更新的进展情况。

def OnStart(self, e):
while True:
time.sleep(1);
self.count = self.count + 1
self.gauge.SetValue(self.count)

if self.count >= 20:
print "end"
return

例子的完整代码如下 -

import wx
import time
class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (300,200))
self.InitUI()

def InitUI(self):
self.count = 0
pnl = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)

hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)

self.gauge = wx.Gauge(pnl, range = 20, size = (250, 25), style = wx.GA_HORIZONTAL)
self.btn1 = wx.Button(pnl, label = "Start")
self.Bind(wx.EVT_BUTTON, self.OnStart, self.btn1)

hbox1.Add(self.gauge, proportion = 1, flag = wx.ALIGN_CENTRE)
hbox2.Add(self.btn1, proportion = 1, flag = wx.RIGHT, border = 10)

vbox.Add((0, 30))
vbox.Add(hbox1, flag = wx.ALIGN_CENTRE)
vbox.Add((0, 20))
vbox.Add(hbox2, proportion = 1, flag = wx.ALIGN_CENTRE)
pnl.SetSizer(vbox)

self.SetSize((300, 200))
self.Centre()
self.Show(True)

def OnStart(self, e):
while True:
time.sleep(1);
self.count = self.count + 1
self.gauge.SetValue(self.count)

if self.count >= 20:
print "end"
return

ex = wx.App()
Mywin(None,'wx.Gauge - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

a45b7ac60cdd4df561be520908b5e15d.jpg

本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython Guage类

wxPython Slider类 - WxPython教程™

滑块呈现一个槽在一个句柄用户可以移动。这是一个典型的小工具用来控制有界值。 在沟槽的句柄位置相当于控件的上限和下限之间的整数。


wxPython的API包含wx.Slider类。它提供了相同的功能的滚动条。滑块提供了一个方便的方式来处理由滑块指定 wx.EVT_SLIDER 事件绑定拖动句柄。

wx.Slider构造函数的定义采用以下八个参数 -

wx.Slider(parent, id, value, minValue, maxValue, pos, size, style) 

滑块的下部和上部的值由minValue(最小值)和包括maxValue参数设置。起始值由 value 参数定义。

许多样式的参数值被定义。以下是其中的一些 −

S.N.

参数和说明

1

wxSL_HORIZONTAL

水平滑块

2

wxSL_VERTICAL

水直滑块

3

wxSL_AUTOTICKS

在滑块显示tickmarks

4

wxSL_LABELS

显示最小值,最大值,和当前值

5

wxSL_MIN_MAX_LABELS

显示最小和最大值

6

wxSL_VALUE_LABEL

只显示当前值

wx.Slider类的有用的方法是 −

S.N.

方法和说明

1

GetMin()

返回滑块的最小值

2

GetMax()

返回滑块的最大值

3

GetValue()

返回滑块的当前值

4

SetMin()

设置滑块的最小值

5

SetMax()

设置滑块的最大值

6

SetRange()

设置滑块的最小和最大值

7

SetValue()

设置当前值

8

SetTick()

在给定的位置显示刻度线

9

SetTickFreq()

设置最小值和最大值之间的刻度间隔

当滑块行为类似于滚动条,滚动条事件的绑定器也可以与它一起使用。

S.N.

事件和说明

1

wx.EVT_SCROLL

处理滚动事件

2

wx.EVT_SLIDER

当滑块位置的变化,或者通过移动句柄或编程

实例

在以下的例子中,滑块是用来控制一个标签的大小。首先,滑块对象被放置在一个垂直框大小测定器(sizer)下面,这是一个静态文本。

self.sld = wx.Slider(pnl, value = 10, minValue = 1, maxValue = 100,
style = wx.SL_HORIZONTAL|wx.SL_LABELS)

self.txt = wx.StaticText(pnl, label = 'yiibai.com',style = wx.ALIGN_CENTER)

Wx.EVT_SLIDER绑定器与OnSliderScroll()句柄处理程序相关联。

self.sld.Bind(wx.EVT_SLIDER, self.OnSliderScroll)

该处理程序本身获取滑块的当前值,并用它作为标签的文本字体大小。

def OnSliderScroll(self, e):
obj = e.GetEventObject()
val = obj.GetValue()
font = self.GetFont()
font.SetTutorialsSize(self.sld.GetValue())
self.txt.SetFont(font)  

Slider.py 完整的代码如下 -

import wx

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (400,300))
self.InitUI()

def InitUI(self):
pnl = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)

self.sld = wx.Slider(pnl, value = 10, minValue = 1, maxValue = 100,
style = wx.SL_HORIZONTAL|wx.SL_LABELS)

vbox.Add(self.sld,1,flag = wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border = 20)
self.sld.Bind(wx.EVT_SLIDER, self.OnSliderScroll)
self.txt = wx.StaticText(pnl, label = 'Yiibai.com',style = wx.ALIGN_CENTER)
vbox.Add(self.txt,1,wx.ALIGN_CENTRE_HORIZONTAL)

pnl.SetSizer(vbox)
self.Centre()
self.Show(True)

def OnSliderScroll(self, e):
obj = e.GetEventObject()
val = obj.GetValue()
font = self.GetFont()
font.SetTutorialsSize(self.sld.GetValue())
self.txt.SetFont(font)

ex = wx.App()
Mywin(None,'Slider Demo - www.yiibai.com')
ex.MainLoop() 

运行代码,并尝试拖动滑块句柄,看看标签的字体大小变化。上面的代码产生下面的输出 -

7b023e20724b7397c51b237f334469be.jpg



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython Slider类

Menu Item, Menu & MenuBar类 - WxPython教程™

正下方顶层窗口的标题栏中保留了一个水平条,以显示一系列菜单。 这就是 wx.MenuBar 类在 wxPython 中 API 的对象。

wx.Menu类的一个对象被添加到菜单栏。它也用于创建上下文菜单和弹出菜单。每个菜单可以包含一个或多个wx.MenuItem对象或级联Menu对象。

wx.MenuBar类有一个参数的构造函数,此外还有一个默认的。

wx.MenuBar()

wx.MenuBar(n, menus, titles, style) 

参数“n”表示的菜单的数目。Menu是菜单和标题的数组和字符串数组。如果style参数设置为wx.MB_DOCKABLE,菜单栏可以停靠。

以下是wx.MenuBar类的方法列表 -

S.N.

方法和说明

1

Append()

添加菜单对象到工具栏

2

Check()

选中或取消选中菜单

3

Enable()

启用或禁用菜单

4

Remove()

去除工具栏中的菜单

wx.Menu类对象是一个或多个菜单项,其中一个可被用户选择的下拉列表。

下表显示了wx.Menu类经常需要的方法-

S.N.

方法和说明

1

Append()

在菜单增加了一个菜单项

2

AppendMenu()

追加一个子菜单

3

AppendRadioItem()

追加可选当选项

4

AppendCheckItem()

追加一个可检查的菜单项

5

AppendSeparator()

添加一个分隔线

6

Insert()

在给定的位置插入一个新的菜单

7

InsertRadioItem()

在给定位置插入单选项

8

InsertCheckItem()

在给定位置插入新的检查项

9

InsertSeparator()

插入分隔行

10

Remove()

从菜单中删除一个项

11

GetMenuItems()

返回菜单项列表

一个菜单项目,可直接使用 Append() 函数添加,或 wx.MenuItem 类的一个对象被追加。

wx.Menu.Append(id, text, kind)

Item = Wx.MenuItem(parentmenu, id, text, kind)
wx.Menu.Append(Item)

要定义一个菜单项,菜单要被添加必须提及。

wxPython中有大量的标准的ID被分配给标准菜单项。在某些操作系统平台上,它们与标准图标也关联。

wx.ID_SEPARATOR

wx.ID_ANY

wx.ID_OPEN

wx.ID_CLOSE

wx.ID_NEW

wx.ID_SAVE

wx.ID_SAVEAS

wx.ID_EDIT

wx.ID_CUT

wx.ID_COPY

wx.ID_PASTE

然而,任何独一无二的整数可以被分配 ID。text参数是它的标题。类参数采用以下之一-

S.N.

参数 & 描述

1

wx.ITEM_NORMAL

普通菜单项

2

wx.ITEM_CHECK

检查(或切换)菜单项

3

wx.ITEM_RADIO

单选菜单项

wx.Menu类也有 AppendRadioItem()和 AppendCheckItem()不需要各种参数。

菜单项可以设置为显示图标或快捷方式。 wx.MenuItem类SetBitmap()函数需要要显示的位图对象。

wx.MenuItem.SetBitmap(wx.Bitmap(image file))

EVT_MENU事件绑定有助于处理菜单选择。

self.Bind(wx.EVT_MENU, self.menuhandler)

实例

下面的例子演示了wxPython的上述大部分的菜单系统的特征。它显示在菜单栏中显示一个文件菜单。普通菜单项,子菜单,单选项和检查项加入。菜单项也带有一个图标显示。

事件处理函数,当被调用时检索与事件关联的ID,并且可以进一步处理。例如,如果“新建”菜单项被选中,这是回显示在框架(frame)上的文本框中。

Menu.py 完整的代码如下 -

import wx

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title, size = (400,300))
self.InitUI()

def InitUI(self):
menubar = wx.MenuBar()

fileMenu = wx.Menu()
newitem = wx.MenuItem(fileMenu,wx.ID_NEW, text = "New",kind = wx.ITEM_NORMAL)
newitem.SetBitmap(wx.Bitmap("new.bmp"))
fileMenu.AppendItem(newitem)

fileMenu.AppendSeparator()

editMenu = wx.Menu()
copyItem = wx.MenuItem(editMenu, 100,text = "copy",kind = wx.ITEM_NORMAL)
copyItem.SetBitmap(wx.Bitmap("copy.bmp"))

editMenu.AppendItem(copyItem)
cutItem = wx.MenuItem(editMenu, 101,text = "cut",kind = wx.ITEM_NORMAL)
cutItem.SetBitmap(wx.Bitmap("cut.bmp"))

editMenu.AppendItem(cutItem)
pasteItem = wx.MenuItem(editMenu, 102,text = "paste",kind = wx.ITEM_NORMAL)
pasteItem.SetBitmap(wx.Bitmap("paste.bmp"))

editMenu.AppendItem(pasteItem)
fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu)
fileMenu.AppendSeparator()

radio1 = wx.MenuItem(fileMenu, 200,text = "Radio1",kind = wx.ITEM_RADIO)
radio2 = wx.MenuItem(fileMenu, 300,text = "radio2",kind = wx.ITEM_RADIO)

fileMenu.AppendItem(radio1)
fileMenu.AppendItem(radio2)
fileMenu.AppendSeparator()

fileMenu.AppendCheckItem(103,"Checkable")
quit = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+Q')

fileMenu.AppendItem(quit)
menubar.Append(fileMenu, '&File')

self.SetMenuBar(menubar)
self.text = wx.TextCtrl(self,-1, style = wx.EXPAND|wx.TE_MULTILINE)
self.Bind(wx.EVT_MENU, self.menuhandler)
self.SetSize((350, 250))
self.Centre()
self.Show(True)

def menuhandler(self, event):
id = event.GetId()
if id == wx.ID_NEW:
self.text.AppendText("new"+"\n")

ex = wx.App()
Mywin(None,'MenuBar Demo - yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

5078bb95e21e5ad3e14e36dd126a051b.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » Menu Item, Menu & MenuBar类

wxPython ToolBar类 - WxPython教程™

工具栏包括文本文字说明或图标按钮的一个或多个水平条,通常被放置在MenuBar顶层帧的正下方。

如果wx.Toolbar对象的style参数设置为wx.TB_DOCKABLE,它成为可停靠。浮动工具栏还可以用wxPython中的AUIToolBar类来构造。

构造函数不带任何参数则使用工具栏默认参数。附加参数可以传递给wx.ToolBar类构造如下 -

Wx.ToolBar(parent, id, pos, size, style)

对于wx.ToolBar定义的样式参数包括常数 -

S.N.

参数和说明

1

wx.TB_FLAT

提供该工具栏平面效果

2

wx.TB_HORIZONTAL

指定水平布局(默认)

3

wxTB_VERTICAL

指定垂直布局

4

wx.TB_DEFAULT_STYLE

结合wxTB_FLAT和wxTB_HORIZONTAL

5

wx.TB_DOCKABLE

使工具栏浮动和可停靠

6

wx.TB_NO_TOOLTIPS

当鼠标悬停在工具栏不显示简短帮助工具提示,

7

wx.TB_NOICONS

指定工具栏按钮没有图标;默认它们是显示的

8

wx.TB_TEXT

显示在工具栏按钮上的文本;默认情况下,只有图标显示

不同特征的工具按钮可以添加到工具栏。 Wx.ToolBar类具有以下有用的方法 -

S.N.

方法和说明

1

AddTool()

添加工具按钮到工具栏。工具的类型是由各种参数指定的

2

AddRadioTool()

添加属于按钮的互斥组按钮

3

AddCheckTool()

添加一个切换按钮到工具栏

4

AddLabelTool()

使用图标和标签来添加工具栏

5

AddSeparator()

添加一个分隔符来表示工具按钮组

6

AddControl()

添加任何控制工具栏。 例如,wx.Button,wx.Combobox等。

7

ClearTools()

删除所有在工具栏的按钮

8

RemoveTool()

从给出工具按钮移除工具栏

9

Realize()

工具按钮增加调用

AddTool()方法至少需要三个参数 -

AddTool(parent, id, bitmap) 

父参数是在按钮被添加到工具栏。通过位图bitmap参数所指定图像图标。

工具按钮发出EVT_TOOL事件。如果添加到工具栏其他控制必须由各自CommandEvent绑定器到事件处理程序约束。

实例

在下面的例子中,工具栏上显示两个正常的工具按钮,三个单选工具按钮和一个组合框。

首先,工具栏对象被激活。

tb = wx.ToolBar( self, -1 )
self.ToolBar = tb

使用AddTool()方法,两个工具的图标为“新建”,“保存”被添加。

tb.AddTool( 101, wx.Bitmap("new.png") )
tb.AddTool(102,wx.Bitmap("save.png"))

一组RadioTools,然后添加到工具栏,其中只有一个是可选择在同一时间。

right = tb.AddRadioTool(222,wx.Bitmap("right.png"))
center = tb.AddRadioTool(333,wx.Bitmap("center.png"))
justify = tb.AddRadioTool(444,wx.Bitmap("justify.png"))

使用wx.ComboBox控件的AddControl()方法添加到工具栏。组合框列表中包含的字体的名称。

self.combo = wx.ComboBox(tb, 555, value = "Times", choices = ["Arial","Times","Courier"])

Realize() 方法需要被调用,以最终确定工具栏创建。

tb.Realize()

最后,事件绑定器工具栏和组合框被注册。

tb.Bind(wx.EVT_TOOL, self.Onright)
tb.Bind(wx.EVT_COMBOBOX,self.OnCombo) 

相应的事件处理程序以追加方式处理该事件源。虽然EVT_TOOL事件的ID会显示在工具栏下方的文本框中,选中的字体名称添加到它的时候,EVT_COMBOBOX事件触发。

def Onright(self, event):
self.text.AppendText(str(event.GetId())+"\n")

def OnCombo(self,event):
self.text.AppendText( self.combo.GetValue()+"\n")

整个代码如下 -

import wx

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title)
self.InitUI()

def InitUI(self):
menubar = wx.MenuBar()
menu = wx.Menu()
menubar.Append(menu,"File")
self.SetMenuBar(menubar)

tb = wx.ToolBar( self, -1 )
self.ToolBar = tb

tb.AddTool( 101, wx.Bitmap("new.png") )
tb.AddTool(102,wx.Bitmap("save.png"))

right = tb.AddRadioTool(222,wx.Bitmap("right.png"))
center = tb.AddRadioTool(333,wx.Bitmap("center.png"))
justify = tb.AddRadioTool(444,wx.Bitmap("justify.png"))

tb.Bind(wx.EVT_TOOL, self.Onright)
tb.Bind(wx.EVT_COMBOBOX,self.OnCombo)
self.combo = wx.ComboBox( tb, 555, value = "Times", choices = ["Arial","Times","Courier"])

tb.AddControl(self.combo )
tb.Realize()
self.SetSize((350, 250))

self.text = wx.TextCtrl(self,-1, style = wx.EXPAND|wx.TE_MULTILINE)
self.Centre()
self.Show(True)

def Onright(self, event):
self.text.AppendText(str(event.GetId())+"\n")

def OnCombo(self,event):
self.text.AppendText( self.combo.GetValue()+"\n")

ex = wx.App()
Mywin(None,'ToolBar Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -
d4218f19621d7f51c223fddde601ce53.jpg



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython ToolBar类

wxPython Dialog类 - WxPython教程™

虽然Dialog类对象将显示像Frame,它通常被用作上的父框架的顶部上的弹出窗口。Dialog的目的是从用户收集一些数据并将其发送到父frame。对话框 Dialog 可以模态(它阻止父帧)或无模式(对话框架可被绕过)。 ShowModal()方法显示模态方式对话框frame,Show() 使得它无模式。

wxPython中有一些预配置对话框控件,如:MessageDialog,FileDialog,FontDialog类等。

wx.Dialog支持使用Sizers 仅仅作为一个wx.Frame对象。因此,定制的Dialog可设计。

wx.Dialog类的构造函数如下常用的参数 -

wx.Dialog(parent, id, title, pos, size, style) 

Dialog控件的默认外观显示在标题栏中只关闭对话框。但是,它可以用下面的风格参数的组合进行定制−

S.N.

参数 & 描述

1

wx.CAPTION

对话框的文字说明

2

wx.DEFAULT_DIALOG_STYLE

相当于wxCAPTION,wxCLOSE_BOX和wxSYSTEM_MENU的组合

3

wx.RESIZE_BORDER

显示可调框架窗口的大小

4

wxSYSTEM_MENU

显示系统菜单

5

wx.CLOSE_BOX

框架(frame)上显示一个关闭

6

wx.MAXIMIZE_BOX

在对话框中显示一个最大化框

7

wx.MINIMIZE_BOX

在对话框中显示一个最小化框(frame)

8

wx.STAY_ON_TOP

确保对话框停留在所有其他窗口的顶部

9

wx.DIALOG_NO_PARENT

为防止产生无看管对话框。不推荐用于模态对话框

两个事件由绑定器定义该类-

S.N.

事件和说明

1

EVT_CLOSE

当用户或编程对话框的关闭

2

EVT_INIT_DIALOG

When the dialog is being initialized

如上所述,对话的目的是收集数据并返回到父窗口。然而,一些有用的方法可用于 Dialog类。

S.N.

方法和说明

1

DoOK()

当对话框中的OK按钮被按下时调用

2

ShowModal()

显示了在应用程序模态方式的对话框

3

ShowWindowModal()

对话框只顶层父窗口的模式

4

EndModal()

ShowModal调用传递值结束一个对话框模式

一个预配置的对话框是MessageDialog。它用于显示的一条或多条线用具有标准ID的按钮的消息。 下面是对MessageDialog标准按钮选择列表。

S.N.

按钮和说明

1

wx.OK

显示OK按钮

2

wx.CANCEL

显示取消(Cancel)按钮

3

wx.YES_NO

显示“是”,“否”按钮

4

wx.YES_DEFAULT

使Yes按钮为默认

5

wx.NO_DEFAULT

使No按钮为默认

6

wx.ICON_EXCLAMATION

显示警告图标

7

wx.ICON_ERROR

显示错误图标

8

wx.ICON_HAND

同wx.ICON_ERROR

9

wx.ICON_INFORMATION

显示一个信息图标

10

wx.ICON_QUESTION

显示一个问题图标

MessageDialog

此声明使用下面的构造 -

wx.MessageDialog(parent, message, caption, style, pos) 

一个或多个消息参数要显示文本的行,文字说明显示在标题栏。默认style参数是wx.OK| wx.ECNRE。 其他样式style参数允许消息框进行定制。

wx.MessageBox是一个方便的功能,使用MessageDialog构建代替消息框。

实例

下面给出的是对话的模式和无模式的行为简单的演示。父窗口是wx.Frame对象带有两个按钮。Click事件的第一个按钮将显示在模态的方式的对话框。因此,防止父窗口上的任何操作,直到对话框关闭。第二个按钮,将显示一个无模式对话框,这并不妨碍访问父窗口。第三个按钮会显示一个消息框。

整个代码如下 -

import wx

class MyDialog(wx.Dialog):
def __init__(self, parent, title):
super(MyDialog, self).__init__(parent, title = title, size = (250,150))
panel = wx.Panel(self)
self.btn = wx.Button(panel, wx.ID_OK, label = "ok", size = (50,20), pos = (75,50))

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title, size = (250,150))
self.InitUI()

def InitUI(self):
panel = wx.Panel(self)
btn = wx.Button(panel, label = "Modal Dialog", pos = (75,10))
btn1 = wx.Button(panel, label = "Modeless Dialog", pos = (75,40))
btn2 = wx.Button(panel, label = "MessageBox", pos = (75,70))
btn.Bind(wx.EVT_BUTTON, self.OnModal)

a = btn1.Bind(wx.EVT_BUTTON, self.OnModeless)
print a
btn2.Bind(wx.EVT_BUTTON, self.Onmsgbox)
self.Centre()
self.Show(True)

def OnModal(self, event):
a = MyDialog(self, "Dialog").ShowModal()
print a

def OnModeless(self, event):
a = MyDialog(self, "Dialog").Show()

def Onmsgbox(self, event):
wx.MessageBox("This is a Message Box", "Message" ,wx.OK | wx.ICON_INFORMATION)

ex = wx.App()
Mywin(None,'Dialog Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

9c473a876d3125f18c8c94f51242bc80.jpg

261991eb47c3504fc340fbaf56a67dd4.jpg

wx.TextEntryDialog

这个类的对象显示一个文本字段,可定制的标签,提示用户输入以及两个按钮使用预定义样式的对话框。

虽然这个对话框要求一行输入,文本框可以通过使用TextCtrl风格,如密码和多进行定制。

文本字段收集内容,当用户点击OK按钮返回相应值。TextEntryDialog构造如下 -

wx.TextEntryDialog(parent, id, message, caption, value, style, pos) 

在对话窗口传递的消息参数要显示的文字。caption 参数是要显示在标题栏的字符串。在文本框中默认字符串值value参数。TextCtrl在对话框可以设置显示密码字符(wx.TE_PASSWORD)和/或多行(wx.TE_MULTILINE)。

TextEntry 类的其他方法如下列表中 -

S.N.

方法和说明

1

SetMaxLength()

设置用户可以输入到文本框最大字符数

2

SetValue()

设置文本框的值编程

3

GetValue()

返回该文本框的内容

4

ShowModal()

显示对话框模态。返回 wx.ID_OK 如果用户确认输入,以及 wx.ID_CANCEL 如果对话框被拒绝

实例

在下面的例子中顶层帧示出了按钮和一个只读 TextCtrl 插件。

self.text = wx.TextCtrl(pnl, size = (250, 25),style = wx.TE_READONLY)
self.btn1 = wx.Button(pnl, label = "Enter Text")

响应按钮点击并调用 OnClick()函数。

self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1)

OnClick()函数显示一个 TextEntryDialog。

dlg = wx.TextEntryDialog(self, 'Enter Your Name','Text Entry Dialog')

对话框的返回值是 getValue()函数的值,并在顶层框架的TextCtrl对象中显示。

if dlg.ShowModal() == wx.ID_OK:
self.text.SetValue("Name entered:"+dlg.GetValue())

完整的代码如下 -

import wx

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (300,200))

self.InitUI()

def InitUI(self):
self.count = 0
pnl = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)

hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)

self.text = wx.TextCtrl(pnl, size = (250, 25),style = wx.TE_READONLY)
self.btn1 = wx.Button(pnl, label = "Enter Text")
self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1)

hbox1.Add(self.text, proportion = 1, flag = wx.ALIGN_CENTRE)
hbox2.Add(self.btn1, proportion = 1, flag = wx.RIGHT, border = 10)

vbox.Add((0, 30))
vbox.Add(hbox1, flag = wx.ALIGN_CENTRE)
vbox.Add((0, 20))
vbox.Add(hbox2, proportion = 1, flag = wx.ALIGN_CENTRE)

pnl.SetSizer(vbox)
self.Centre()
self.Show(True)

def OnClick(self, e):
dlg = wx.TextEntryDialog(self, 'Enter Your Name','Text Entry Dialog')

if dlg.ShowModal() == wx.ID_OK:
self.text.SetValue("Name entered:"+dlg.GetValue())
dlg.Destroy()

ex = wx.App()
Mywin(None,'TextEntry Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

16d693a35d3b80b63d4bc8e8199da2fc.jpg


f77ddb1bd84a44f59eb20f34ebc1c11b.jpg


wx.FileDialog类

此类表示一个文件选择对话框。它使用户可以浏览文件系统并选择要打开文件或保存。对话框的外观是由操作系统特定的。

文件滤波器也可以应用到只显示指定扩展名的文件。启动目录和默认的文件名也可以设置。

FileDialog的构造函数的原型是这样的 -

wx.FileDialog(parent, message, DefaultDir, DefaultFile, wildcard, style, pos, size) 

该消息表示将要显示的文本。 DefaultDir是初始目录。一个或多个类型的文件可以被设置为通过通配符参数所表示的文件的过滤器。

FileDialog定义风格参数 -

S.N.

参数和说明

1

wx.FD_DEFAULT_STYLE

相当于wxFD_OPEN

2

wx.FD_OPEN

这是一个打开的对话框;该对话框的默认按钮的标签是“打开”

3

wx.FD_SAVE

这是一个保存对话框;该对话框的默认按钮的标签是“保存”

4

wx.FD_OVERWRITE_PROMPT

对于只保存对话框:提示进行确认,如果一个文件将被覆盖

5

wx.FD_MULTIPLE

仅适用于打开的对话框:允许选择多个文件

6

wx.FD_CHANGE_DIR

更改当前工作目录到用户选择的文件是目录

wx.FileDialog类的成员函数 -

S.N.

函数与说明

1

GetDirectory()

返回默认目录

2

GetFileName()

返回默认文件名

3

GetPath()

返回选定文件的完整路径

4

SetDirectory()

设置默认目录

5

SetFilename()

设置默认文件

6

SetPath()

设置文件路径

7

ShowModal()

显示对话框,如果用户单击OK按钮返回wx.ID_OK,否则 wx.ID_CANCEL

实例

在下面的例子中,顶层帧显示按钮和一个多行TextCtrl。

self.text = wx.TextCtrl(pnl, size = (-1,200), style = wx.TE_MULTILINE)
self.btn1 = wx.Button(pnl, label = "Open a File")

EVT_BUTTON事件绑定注册 OnClick()函数到按钮。

self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1) 

OnClick()函数显示一个FileDialog的打开模式。其选择返回为dlg。通过GetPath()函数获得的选定文件和它的内容显示在父窗口的TextCtrl框。

def OnClick(self, e):
wildcard = "Text Files (*.txt)|*.txt"
dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", wildcard, wx.OPEN)

if dlg.ShowModal() == wx.ID_OK:
f = open(dlg.GetPath(), 'r')
with f:
data = f.read()
self.text.SetValue(data)

完整的代码如下 -

import wx
import os

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title)

self.InitUI()

def InitUI(self):
self.count = 0
pnl = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)

self.text = wx.TextCtrl(pnl, size = (-1,200),style = wx.TE_MULTILINE)
self.btn1 = wx.Button(pnl, label = "Open a File")
self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1)

hbox1.Add(self.text, proportion = 1, flag = wx.ALIGN_CENTRE)
hbox2.Add(self.btn1, proportion = 1, flag = wx.RIGHT, border = 10)

vbox.Add(hbox2, proportion = 1, flag = wx.ALIGN_CENTRE)

vbox.Add(hbox1, proportion = 1, flag = wx.EXPAND|wx.ALIGN_CENTRE)

pnl.SetSizer(vbox)
self.Centre()
self.Show(True)

def OnClick(self, e):
wildcard = "Text Files (*.txt)|*.txt"
dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", wildcard, wx.OPEN)

if dlg.ShowModal() == wx.ID_OK:
f = open(dlg.GetPath(), 'r')

with f:
data = f.read()
self.text.SetValue(data)
dlg.Destroy()

ex = wx.App()
Mywin(None, 'FileDialog Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

626a85686ee4755db561376606e964fe.jpg

b5f12a5d6c5b713f9ac17b682e6f23d5.jpg


wx.FontDialog 类

这个类的对象是一个字体选择对话框。这个对话框的外观也为操作系统特有的。属性,例如名称,大小,权重等。所选字体的形式返回作为此对话框的返回值。

需要这种类构造Fontdata参数用于初始化这些属性。

wx.FontDialog(parent, data)

此类的GetFontData()方法包含所选字体的参数。

下面的代码展示了如何使用FontDialog类的有一个按钮和一个标签(静态文本对象)。

self.text = wx.StaticText(pnl, label = "hello")
self.btn1 = wx.Button(pnl, label = "Choose Font")

单击时按钮触发 OnClick()函数处理事件。

def OnClick(self, e):
dlg = wx.FontDialog(self,wx.FontData())

if dlg.ShowModal() == wx.ID_OK:
data = dlg.GetFontData()
font = data.GetChosenFont()
self.text.SetFont(font)

dlg.Destroy()

选择字体,然后应用到标签的文本。

FileDialog-2.py 完整的代码如下 -

import wx
import os

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title, size = (400, 300))

self.InitUI()

def InitUI(self):
self.count = 0
pnl = wx.Panel(self)

vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)

self.text = wx.StaticText(pnl, label = "hello")
self.btn1 = wx.Button(pnl, label = "Choose Font")
self.Bind(wx.EVT_BUTTON, self.OnClick, self.btn1)

hbox1.Add(self.text, proportion = 1, flag = wx.ALIGN_CENTRE)
hbox2.Add(self.btn1, proportion = 1, flag = wx.ALIGN_CENTRE, border = 10)

vbox.Add(hbox2, flag = wx.ALIGN_CENTRE)

vbox.Add(hbox1, proportion = 1, flag = wx.ALIGN_CENTRE)

pnl.SetSizer(vbox)
self.Centre()
self.Show(True)

def OnClick(self, e):
dlg = wx.FontDialog(self,wx.FontData())

if dlg.ShowModal() == wx.ID_OK:
data = dlg.GetFontData()
font = data.GetChosenFont()
self.text.SetFont(font)

dlg.Destroy()

ex = wx.App()
Mywin(None,'FileDialog Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

e97bde2604fea3b3fe00ba4073202e3d.jpg

53711244796d8719af14ec8022dd238d.jpg



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython Dialog类

wxPython SplitterWindow类 - WxPython教程™

这个类的对象是一个布局管理器,它拥有两个子窗口的大小可以通过拖动它们之间的界限来动态变化。Splitter控件给出了句柄来拖动调整控件。

wx.SplitterWindow类有一个非常基本的构造-所有参数使用缺省值。

wx.SplitterWindow(self, id, pos, size, style)

预定义值的样式参数列表如下 -

S.N.

参数和说明

1

wxSP_3D

绘制3D效果边框和窗扇(sash)

2

wxSP_THIN_SASH

绘制一个薄sash

3

wxSP_3DSASH

绘制3D效果sash (默认样式的一部分)

4

wxSP_BORDER

绘制标准边框

5

wxSP_NOBORDER

无边框(默认)

6

wxSP_PERMIT_UNSPLIT

总是允许取消分割,即使采用最小的窗格大小不为零

SplitterWindow类的事件绑定器 -

S.N.

事件和说明

1

EVT_SPLITTER_SASH_POS_CHANGING()

sash 的位置在被改变的过程

2

EVT_SPLITTER_SASH_POS_CHANGED()

窗框位置被改变

3

EVT_SPLITTER_UNSPLIT()

分割器一直只是取消分割

4

EVT_SPLITTER_DCLICK()

窗框被双点击。默认行为是在取消分割窗口出现这种情况时

下面的代码演示 SplitterWindow 功能。分离器对象添加到顶层帧。

splitter = wx.SplitterWindow(self, -1)

面板被设计来持有多行TextCtrl对象。

b = wx.BoxSizer(wx.HORIZONTAL)
self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)

b.Add(self.text, 1, wx.EXPAND)
panel1.SetSizerAndFit(b)

一个列表框对象放在另一个面板。

panel2 = wx.Panel(splitter, -1)
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript', 'PHP', 'VB.NET', 'C#']
lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(lst,1)
panel2.SetSizer(hbox1)

分割器(Splitter)对象被垂直分割和两个面板并添加到2子窗口。子窗口的宽度可以使用窗扇调整。

splitter.SplitVertically(panel2, panel1)

Splitter.py 完整代码如下 -

import wx
class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (350,300))

splitter = wx.SplitterWindow(self, -1)
panel1 = wx.Panel(splitter, -1)
b = wx.BoxSizer(wx.HORIZONTAL)

self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)
b.Add(self.text, 1, wx.EXPAND)

panel1.SetSizerAndFit(b)
panel2 = wx.Panel(splitter, -1)

languages = ['C', 'C++', 'Java', 'Python', 'Perl',
'JavaScript', 'PHP' ,'VB.NET' ,'C#']
lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE)

hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(lst,1)

panel2.SetSizer(hbox1)
splitter.SplitVertically(panel2, panel1)
self.Centre()
self.Bind(wx.EVT_LISTBOX, self.onListBox, lst)
self.Show(True)

def onListBox(self, event):
self.text.AppendText( "Current selection: " +
event.GetEventObject().GetStringSelection() +"\n")

ex = wx.App()
Mywin(None,'Splitter Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

8e038ac31da1a75c008e93f83d034865.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython SplitterWindow类

wxPython SplitterWindow类 - WxPython教程™

这个类的对象是一个布局管理器,它拥有两个子窗口的大小可以通过拖动它们之间的界限来动态变化。Splitter控件给出了句柄来拖动调整控件。

wx.SplitterWindow类有一个非常基本的构造-所有参数使用缺省值。

wx.SplitterWindow(self, id, pos, size, style)

预定义值的样式参数列表如下 -

S.N.

参数和说明

1

wxSP_3D

绘制3D效果边框和窗扇(sash)

2

wxSP_THIN_SASH

绘制一个薄sash

3

wxSP_3DSASH

绘制3D效果sash (默认样式的一部分)

4

wxSP_BORDER

绘制标准边框

5

wxSP_NOBORDER

无边框(默认)

6

wxSP_PERMIT_UNSPLIT

总是允许取消分割,即使采用最小的窗格大小不为零

SplitterWindow类的事件绑定器 -

S.N.

事件和说明

1

EVT_SPLITTER_SASH_POS_CHANGING()

sash 的位置在被改变的过程

2

EVT_SPLITTER_SASH_POS_CHANGED()

窗框位置被改变

3

EVT_SPLITTER_UNSPLIT()

分割器一直只是取消分割

4

EVT_SPLITTER_DCLICK()

窗框被双点击。默认行为是在取消分割窗口出现这种情况时

下面的代码演示 SplitterWindow 功能。分离器对象添加到顶层帧。

splitter = wx.SplitterWindow(self, -1)

面板被设计来持有多行TextCtrl对象。

b = wx.BoxSizer(wx.HORIZONTAL)
self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)

b.Add(self.text, 1, wx.EXPAND)
panel1.SetSizerAndFit(b)

一个列表框对象放在另一个面板。

panel2 = wx.Panel(splitter, -1)
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript', 'PHP', 'VB.NET', 'C#']
lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(lst,1)
panel2.SetSizer(hbox1)

分割器(Splitter)对象被垂直分割和两个面板并添加到2子窗口。子窗口的宽度可以使用窗扇调整。

splitter.SplitVertically(panel2, panel1)

Splitter.py 完整代码如下 -

import wx
class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (350,300))

splitter = wx.SplitterWindow(self, -1)
panel1 = wx.Panel(splitter, -1)
b = wx.BoxSizer(wx.HORIZONTAL)

self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)
b.Add(self.text, 1, wx.EXPAND)

panel1.SetSizerAndFit(b)
panel2 = wx.Panel(splitter, -1)

languages = ['C', 'C++', 'Java', 'Python', 'Perl',
'JavaScript', 'PHP' ,'VB.NET' ,'C#']
lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE)

hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(lst,1)

panel2.SetSizer(hbox1)
splitter.SplitVertically(panel2, panel1)
self.Centre()
self.Bind(wx.EVT_LISTBOX, self.onListBox, lst)
self.Show(True)

def onListBox(self, event):
self.text.AppendText( "Current selection: " +
event.GetEventObject().GetStringSelection() +"\n")

ex = wx.App()
Mywin(None,'Splitter Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

4de9778a18b8a0f82a12640069524e7f.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython SplitterWindow类

wxPython HTMLWindow类 - WxPython教程™

wxHTML库中包含用于解析和显示HTML内容。这不是一个全功能的浏览器,wx.HtmlWindow对象是一个通用的HTML浏览器。

HtmlWindow类的构造函数需要一个熟悉的外观 -

(Parent, id, pos, size, style)

此类支持以下样式 -

S.N.

样式和说明

1

wxHW_SCROLLBAR_NEVER

永远不显示滚动条,即使是页面比窗口大

2

wxHW_SCROLLBAR_AUTO

只有在页面大小超过窗口大小显示滚动条

3

wxHW_NO_SELECTION

不要让用户选择文本

以下事件绑定器可用于这一个类 -

S.N.

事件和说明

1

EVT_HTML_CELL_CLICKED

一个wxHtmlCell被点击

2

EVT_HTML_CELL_HOVER

鼠标经过wxHtmlCell

3

EVT_HTML_LINK_CLICKED

wxHtmlCell其中包含一个超链接被点击

这个类经常使用的成员函数如下 -

S.N.

函数与说明

1

AppendToPage()

HTML追加到当前显示的文字片段,并刷新窗口

2

HistoryBack()

又回到了以前访问过的网页

3

HistoryForward()

转到历史的下一页

4

LoadPage()

加载一个HTML文件

5

OnLinkClicked()

超链接被点击时调用

6

SetPage()

设置标记HTML的标签,文字作为页面内容

下面的代码显示一个简单的HTML浏览器。上运行的代码,一个TextEntry对话框弹出要求输入URL。wx.HtmlWindow类的LoadPage()方法显示内容在窗口中。

import wx
import wx.htmll

class MyHtmlFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size = (600,400))
html = wx.htmll.HtmlWindow(self)

if "gtk2" in wx.PlatformInfo:
html.SetStandardFonts()

dlg = wx.TextEntryDialog(self, 'Enter a URL', 'HTMLWindow')

if dlg.ShowModal() == wx.ID_OK:
html.LoadPage(dlg.GetValue())

app = wx.App()
frm = MyHtmlFrame(None, "Simple HTML Browser")
frm.Show()
app.MainLoop()

执行上面的代码,产生以下结果:

4fe33d63bd100be7857c0904e67c7783.jpg


5fce007baaed1d882c5b764e50970b88.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython HTMLWindow类

wxPython Major类 - WxPython教程™

原始的 wxWidgets(用C++编写)是一个巨大的类库。GUI类从这个库使用wxPython模块被移植到Python,它尽可能接近反映原始wxWidgets库。所以,在wxPython中wx.Frame类作用非常类似在其C++版本wxFrame类。

wxObject是大部分类基础。wxApp(wx.App在wxPython中)对象表示应用程序本身。产生GUI后,应用程序进入由MainLoop()方法的事件循环。下图说明包括在wxPython中最常用的GUI类的类层次结构。
271919c7e826528c6ab731f9cacb5bd5.jpg

960e75509d3dd0656e37b8c4c64e21b1.jpg

S.N.

类 & 说明

1

wx.Frame

wx.Frame类是不带参数的默认构造函数。

2

wx.Panel

wx.Panel类通常是一个放入wxFrame中的对象。 这个类也继承自wxWindow类。

3

wx.StaticText

wx.StaticText类对象提供了一个控制持有比如只读文本。它可以被称作被动控制,因为它不产生任何事件。

4

TextCtrl

在wxPython中,wx.TextCtrl类对象用于于此目的。它控制在其中可以显示文本和编辑。

5

RadioButton & RadioBox

每个按钮,wx.RadioButton类的一个对象携带旁边有一个圆形按钮文本标签。wxPython的API还包括wx.RadioBox类。它的对象提供了一个边框和标签组。

6

wx.CheckBox

一个复选框显示一个小标记的矩形框。单击时,复选标记出现在矩形内,指示作出选择。

7

ComboBox & Choice Class

一个wx.ComboBox对象提供选择项目列表。它可以配置为一个下拉列表或永久性的显示。wxPython的API包含一个wx.Choice类,其目的也是一个下拉列表中,这是永久只读。

8

Wx.Gauge

Wx.Gauge类对象表示垂直或水平条,其中以图形方式显示递增量。

9

wx.Slider

wxPython的API包含wx.Slider类。它提供了滚动条相同的功能。滑动器提供了一个方便的方式来处理由滑块具体wx.EVT_SLIDER事件绑定拖动句柄。

10

wx.MenuBar

略低于顶层窗口的标题栏中的横条保留,以显示一系列菜单。这是wx.MenuBar类在wxPython API的对象。

11

wx.Toolbar

如果wx.Toolbar对象的样式参数设置为wx.TB_DOCKABLE,它成为可停靠。浮动工具栏还可以用wxPython中的AUIToolBar类构造。

12

Wx.Dialog

虽然一个对话框Dialog类对象出现像Frame,它通常被用作上的父框架的顶部上的弹出窗口。一个对话框(Dialog)的目的是从用户收集一些数据并将其发送到父帧(frame)。

13

wx.Notebook

wx.Notebook小部件提供了一个标签式的控制。在一个帧(Frame)中的一个笔记本对象具有一个或多个切换标签(称为页),其中每一个具有一个面板显示出的控制布局。

14

wx.SplitterWindow

这个类的对象是一个布局管理器,它拥有两个子窗口,大小可以通过拖动它们之间的边界动态变化。分离器控制给出了可拖动来调整控件的句柄。

15

HTMLWindow

wxHTML库中包含用于解析和显示HTML内容。 虽然这不打算成为一个全功能的浏览器,wx.HtmlWindow对象是一个通用的HTML浏览器。

16

ListBox & ListCtrl

一个wx.ListBox控件呈现字符串的垂直滚动列表。 默认情况下,在列表中的单个产品选择。ListCtrl控件是一个高度增强列表显示和选择工具。多个列的列表可以显示在报表视图,列表视图或图标视图。


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython Major类

wxPython事件处理 - WxPython教程™

不像控制台模式应用程序,一个基于GUI的应用程序是事件驱动的,这是在一个顺序的方式执行的。 函数或方法响应于像点击按钮,从集合或鼠标点击等,调用事件选择项目处理函数,用户的操作被执行。

有关某个事件其中应用程序的运行时期间发生的数据被存储为来自wx.Event衍生的子类的对象。一种显示控件(例如按钮)是一种特定类型的事件的源,并且产生与其关联事件类的一个对象。例如,点击一个按钮发出 wx.CommandEvent 事件。该事件数据被分派到程序事件处理的方法。wxPython中有许多预定义的事件绑定器。一个事件绑定封装了具体的小部件(控件),其关联的事件类型和事件处理方法之间的关系。

例如,要调用一个按钮的点击事件的程序上的 OnClick()方法,下面的语句是必需的-

self.b1.Bind(EVT_BUTTON, OnClick) 

bind()方法是通过从wx.EvtHandler类的所有显示对象继承。EVT_.BUTTON这里是绑定器,其中关联按钮单击事件的 OnClick()方法。

实例

在下面的例子中,MoveEvent事件是由于拖动顶层窗口 – 在这种情况下,一个wx.Frame对象使用wx.EVT_MOVE绑定器连接到OnMove()方法。代码显示一个窗口。如果使用鼠标移动,其瞬时坐标显示在控制台上。

import wx

class Example(wx.Frame):

def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()

def InitUI(self):
self.Bind(wx.EVT_MOVE, self.OnMove)
self.SetSize((250, 180))
self.SetTitle('Move event')
self.Centre()
self.Show(True)

def OnMove(self, e):
x, y = e.GetPosition()
print "current window position x = ",x," y= ",y

ex = wx.App()
Example(None)
ex.MainLoop()

上面的代码产生下面的输出 -
d18c84087c7045c9944fdbe6729f114b.jpg

current window position x = 562 y = 309

current window position x = 562 y = 309

current window position x = 326 y = 304

current window position x = 384 y = 240

current window position x = 173 y = 408

current window position x = 226 y = 30

current window position x = 481 y = 80

一些来自wx.Event继承子类列于下表中 -

S.N.

事件和说明

1

wxKeyEvent

当一个键被按下或释放时发生

2

wxPaintEvent

在需要重绘窗口的内容时产生

3

wxMouseEvent

包含有关事件,由于鼠标活动数据,如按下鼠标按钮或拖动

4

wxScrollEvent

关联像wxScrollbar和wxSlider滚动控制

5

wxCommandEvent

包含事件数据来自许多构件,如按钮,对话框,剪贴板等原

6

wxMenuEvent

不同的菜单相关的事件但不包括菜单命令按钮点击

7

wxColourPickerEvent

wxColourPickerCtrl生成的事件

8

wxDirFilePickerEvent

通过FileDialog和DirDialog生成的事件

在wxPython中事件是两种类型的。基本事件和命令事件。一个基本的事件停留在它起源的窗口。大多数 wxWidgets生成命令事件。命令事件可以传播到一个或多个窗口,类层次结构来源于窗口上方。

实例

以下是事件传播的一个简单的例子。完整的代码是 -

import wx

class MyPanel(wx.Panel):

def __init__(self, parent):
super(MyPanel, self).__init__(parent)

b = wx.Button(self, label = 'Btn', pos = (100,100))
b.Bind(wx.EVT_BUTTON, self.btnclk)
self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)

def OnButtonClicked(self, e):

print 'Panel received click event. propagated to Frame class'
e.Skip()

def btnclk(self,e):
print "Button received click event. propagated to Panel class"
e.Skip()

class Example(wx.Frame):

def __init__(self,parent):
super(Example, self).__init__(parent)

self.InitUI()

def InitUI(self):

mpnl = MyPanel(self)
self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)

self.SetTitle('Event propagation demo')
self.Centre()
self.Show(True)

def OnButtonClicked(self, e):

print 'click event received by frame class'
e.Skip()

ex = wx.App()
Example(None)
ex.MainLoop() 

在上面的代码中有两个类。 MyPanel是一个子类wx.Panel 以及一个实例,wx.Frame子类是顶层窗口用于程序。一个按钮被放置在面板上。

此按钮对象绑定到的事件处理程序btnclk(),它传播到它的父类(MyPanel在此情况下)。按一下按钮生成可被Skip()方法来传播到其父CommandEvent。

MyPanel类对象也绑定所接收的事件到另一个处理方法OnButtonClicked()。反过来此函数传送到其父,Example类。上面的代码产生下面的输出−
eedbe4e906dc12cd47a4ff3dfb2d773b.jpg

Button received click event. Propagated to Panel class.
Panel received click event. Propagated to Frame class.
Click event received by frame class.



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython事件处理

wxPython BoxSizer布局 - WxPython教程™

sizer允许控件排放在按行或列的方式。BoxSizer布局是由它的定位参数(wxVERTICAL或wxHORIZONTAL)确定。

Box = wx.BoxSizer(wxHORIZONTAL)
Box = wx.BoxSizer(wxVERTICAL)

Add() 方法(从wxSizer继承)它附加到sizer的下一行/列。

Box.Add(control, proportion, flag, border) 

proportion 参数控制的控件响应于所述容器的尺寸改变其大小。各种flag 参数的组合决定控件在sizer的外观。下面是一些标志-

对齐标志

wx.ALIGN_TOP

wx.ALIGN_BOTTOM

wx.ALIGN_LEFT

wx.ALIGN_RIGHT

wx.ALIGN_CENTER_VERTICAL

wx.ALIGN_CENTER_HORIZONTAL

边界标志

wx.TOP

wx.BOTTOM

wx.LEFT

wx.RIGHT

wx.ALL

行为标志

S.N.

行为标志和说明

1

wx.EXPAND

项目将扩大,以填补提供给它的空间(wx.GROW是一样的)

2

wx.SHAPED

与EXPAND相似,但保持了项目的高宽比

3

wx.FIXED_MINSIZE

不允许该项目变得比其最初的最小尺寸更小

4

wx.RESERVE_SPACE_EVEN_IF_ HIDDEN

不允许测量器(sizer)回收项目空间,当它被隐藏时

border参数是整数,也可以在控件之间留下像素空间。 例如,

b = wx.StaticText(self, -1, “Enter a number”)
Box.Add(b,1,wx.ALL|wx.EXPAND,10)

以下是 wx.BoxSizer 类的一些方法 -

S.N.

方法 & 描述

1

SetOrientation()

设置定向wxHORIZONTAL或wxVERTICAL

2

AddSpacer()

添加非伸缩性空间

3

AddStretchSpacer()

增加了伸缩空间,以便调整窗口的大小会影响控件的大小成比例

4

Clear()

从sizer移除子控件

5

Detach()

从sizer删除控件不销毁

6

Insert()

在指定位置插入一个子控件

7

Remove()

从sizer和销毁删除子控件

实例

在下面的代码,一个垂直box sizer用用于放置在 wxFrame 窗口面板对象。

p = wx.Panel(self)
vbox = wx.wx.BoxSizer(wx.VERTICAL)

在框中的第一行显示在中心,并且以20个像素作为边框的标签(wx.StaticText对象)。

l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE )
vbox.Add(l1,0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20)

在第二行中,将显示一个wx.Button对象。因为wx.EXPAND标志它占据窗口的整个宽度。

b1 = wx.Button(p, label = "Btn1")
vbox.Add(b1,0, wx.EXPAND) 

下一行还包含一个按钮。它没有使用EXPAND标志补充说。相反,因为ALIGN_CENTER_HORIZONTAL按钮的默认大小显示在中心水平。

b2 = wx.Button(p, label = "Btn2")
vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL)

在接下来的一行,添加proportion参数到TextCtrl对象设定为1和EXPAND标志集。其结果是,大小变更大。

t = wx.TextCtrl(p)
vbox.Add(t,1,wx.EXPAND,10)

最后一排保持水平sizer 对象,这反过来又都有一个标签,并通过按钮拉伸空格分开。

hbox = wx.BoxSizer(wx.HORIZONTAL)
l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE)
hbox.Add(l2,0,wx.EXPAND)

b3 = wx.Button(p,label = "Btn3")
hbox.AddStretchSpacer(1)
hbox.Add(b3,0,wx.ALIGN_LEFT,20)
vbox.Add(hbox,1,wx.ALL|wx.EXPAND)

最后,垂直box sizer适用于 wx.Panel 对象。

下面是完整的代码 -

import wx

class Example(wx.Frame):

def __init__(self, parent, title):
super(Example, self).__init__(parent, title = title, size = (200,300))

self.InitUI()
self.Centre()
self.Show()

def InitUI(self):
p = wx.Panel(self)
vbox = wx.wx.BoxSizer(wx.VERTICAL)
l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE )
vbox.Add(l1,0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20)
b1 = wx.Button(p, label = "Btn1")
vbox.Add(b1,0,wx.EXPAND)

b2 = wx.Button(p, label = "Btn2")
vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL)
t = wx.TextCtrl(p)
vbox.Add(t,1,wx.EXPAND,10)
hbox = wx.BoxSizer(wx.HORIZONTAL)
l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE)

hbox.Add(l2,0,wx.EXPAND)
b3 = wx.Button(p,label = "Btn3")
hbox.AddStretchSpacer(1)
hbox.Add(b3,0,wx.ALIGN_LEFT,20)
vbox.Add(hbox,1,wx.ALL|wx.EXPAND)
p.SetSizer(vbox)

app = wx.App()
Example(None, title = 'BoxSizer Demo - www.yiibai.com')
app.MainLoop()

上面的代码产生下面的输出 -
a2fdcfd53672dec347037cee54a929dd.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython BoxSizer布局

wxPython GridSizer布局 - WxPython教程™

顾名思义,一个GridSizer对象展示二维网格。控件被添加在网格插槽从左到右和由上到下方顺序。GridSizer对象有四个参数 -

wx.GridSizer(rows, columns, vgap, hgap)

vgap和hgap指定参数控制相邻控件之间的纵向和横向间距。

下表显示了 wxGridSizer 类的一些重要方法 -

S.N.

方法和说明

1

Add()

添加在下一可用网格插槽的控件

2

AddMany()

在控制列表中添加每个项目

3

SetRows()

设置在sizer中的行数

4

GetRows()

检索在该sizer的行数

5

SetCols()

设置在sizer列数

6

GetCols()

检索列数的大小

7

SetVGap()

设置单元之间的垂直间隙(像素)

8

GetVGap()

返回小区之间vgap的值

9

SetHGap()

设置单元之间的水平间隙(像素)

10

GetHGap()

返回指定的小区之间hgap的值

下面的代码演示了一个4×4格,5个像素的垂直和水平边距差的一个简单gridsizer。

Gs = wx.GridSizer(4, 4, 5, 5)

十六按钮对象用'for'循环依次加入。

for i in range(1,17):
btn = "Btn"+str(i)
gs.Add(wx.Button(p,label = btn),0,wx.EXPAND)

Grid.py 完整的代码如下 -

import wx

class Example(wx.Frame):

def __init__(self, parent, title):
super(Example, self).__init__(parent, title = title,size = (300,200))

self.InitUI()
self.Centre()
self.Show()

def InitUI(self):

p = wx.Panel(self)

gs = wx.GridSizer(4, 4, 5, 5)

for i in range(1,17):
btn = "Btn"+str(i)
gs.Add(wx.Button(p,label = btn),0,wx.EXPAND)

p.SetSizer(gs)

app = wx.App()
Example(None, title = 'Grid Demo - www.yiibai.com')
app.MainLoop()

上面的代码产生下面的输出 -
f8cc00ca8e0bf82d38de6e85130bb264.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython GridSizer布局

wxPython FlexiGridSizer布局 - WxPython教程™

这种大小测定器也有一个二维网格。然而,它提供多一点灵活性布局控件在单元中。 尽管同一行中的所有控件具有相同的高度,并且在同一列中的所有控件具有相同的宽度,但每个小区的大小是不均匀的,如在GridSizer。

宽度和/或单元格在单个列中的高度/行可以通过AddGrowableRow()和AddGrowableCol()方法来扩展。

wx.FlexiGridSizer类的构造函数采用四个参数 -

Wx.FlexiGridSizer(rows, cols, vgap, hgap)

wx.FlexiGridSizer的主要方法的简短描述如下 -

S.N.

方法和说明

1

AddGrowableCol()

指定定索引的列增长,如果额外的高度可用。

2

AddGrowRow()

指定的行定索引的增长,如果额外的宽度是可用的。

3

SetFlexibleDirection()

指定大小测定器的灵活性是否影响的行,列或两者。

实例

用下面的代码设计两列表单。 第一列包含标签和第二个包含文本框。第二列被设定为可增长。类似地,第三行被设定为可增长。(请注意,行索引和列索引从0开始)。在AddGrowableCol()和AddGrowableRow()函数的第二个参数是proportion增长。

fgs.AddGrowableRow(2, 1)
fgs.AddGrowableCol(1, 1)

FlexiGrid.py 整个代码如下 -

import wx

class Example(wx.Frame):

def __init__(self, parent, title):
super(Example, self).__init__(parent, title = title, size = (300, 250))

self.InitUI()
self.Centre()
self.Show()

def InitUI(self):
panel = wx.Panel(self)

hbox = wx.BoxSizer(wx.HORIZONTAL)

fgs = wx.FlexGridSizer(3, 2, 10,10)

title = wx.StaticText(panel, label = "Title")
author = wx.StaticText(panel, label = "Name of the Author")
review = wx.StaticText(panel, label = "Review")

tc1 = wx.TextCtrl(panel)
tc2 = wx.TextCtrl(panel)
tc3 = wx.TextCtrl(panel, style = wx.TE_MULTILINE)

fgs.AddMany([(title), (tc1, 1, wx.EXPAND), (author),
(tc2, 1, wx.EXPAND), (review, 1, wx.EXPAND), (tc3, 1, wx.EXPAND)])
fgs.AddGrowableRow(2, 1)
fgs.AddGrowableCol(1, 1)
hbox.Add(fgs, proportion = 2, flag = wx.ALL|wx.EXPAND, border = 15)
panel.SetSizer(hbox)

app = wx.App()
Example(None, title = 'FlexiGrid Demo - www.yiibai.com')
app.MainLoop()

上面的代码产生下面的输出 -
d8d5ea465f660d76d690b4b54634281c.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython FlexiGridSizer布局

wxPython GridBagSizer布局 - WxPython教程™

GridBagSizer是一种多功能大小测定器。它比FlexiGridSizer提供了更多的增强功能。子构件可被添加到网格中的特定单元。此外,一个子物件可以在水平和/或垂直地占据一个以上的单元。 因此,在同一行中的静态文本和多行文本控件可以有不同的宽度和高度。

网格包布局应通过确定位置,跨度和差距进行精心策划。 wx.GridBagSizer类只有一个构造函数接受两个参数。

Wx.GridBagSizer(vgap,hgap) 

GridBagsizer类的最重要的方法是Add(),它接受位置作为强制性参数。 跨度,对齐方式,边界标志和边框尺寸参数是可选的。如果没有明确使用则使用默认值。

Wx.GridbagSizer().Add(control, pos, span, flags, border)

下表列出GridBagSizer类的方法 -

S.N.

方法和说明

1

Add()

在网格中的指定位置增加给定控件

2

GetItemPosition()

返回在网格的控件的位置

3

SetItemPosition()

在网格中的指定位置放置一个控件

4

GetItemSpan()

返回一个项目的行/列跨越

5

SetItemSpan()

跨越指定的项目超过行/列数

以下代码显示,其中有与文本框(TexCtrl)相关联的标签(静态文本)的表单。用指定跨度的参数添加TextCtrl对象。 因此,文本框的宽度跨越多个列。对于名称文本框中跨越了两列。

tc = wx.TextCtrl(panel)
sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5)

文本框的地址是一个多行文本控件跨越了三列。

tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
sizer.Add(tc1, pos = (1,1), span = (1, 3), flag = wx.EXPAND|wx.ALL, border = 5)

如果窗体拉伸成为可增长,包含用于描述多行文本控件行被设置为使得它扩展垂直向下。

tc4 = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
sizer.Add(tc4, pos = (3,1), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5)
sizer.AddGrowableRow(3)

下面是完整的代码 -

import wx

class Example(wx.Frame):

def __init__(self, parent, title):
super(Example, self).__init__(parent, title = title)

self.InitUI()
self.Centre()
self.Show()

def InitUI(self):

panel = wx.Panel(self)
sizer = wx.GridBagSizer(0,0)

text = wx.StaticText(panel, label = "Name:")
sizer.Add(text, pos = (0, 0), flag = wx.ALL, border = 5)

tc = wx.TextCtrl(panel)
sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5)

text1 = wx.StaticText(panel, label = "address")
sizer.Add(text1, pos = (1, 0), flag = wx.ALL, border = 5)

tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
sizer.Add(tc1, pos = (1,1), span = (1, 3), flag = wx.EXPAND|wx.ALL, border = 5)

text2 = wx.StaticText(panel,label = "age")
sizer.Add(text2, pos = (2, 0), flag = wx.ALL, border = 5)

tc2 = wx.TextCtrl(panel)
sizer.Add(tc2, pos = (2,1), flag = wx.ALL, border = 5)

text3 = wx.StaticText(panel,label = "Mob.No")
sizer.Add(text3, pos = (2, 2), flag = wx.ALIGN_CENTER|wx.ALL, border = 5)

tc3 = wx.TextCtrl(panel)
sizer.Add(tc3, pos = (2,3),flag = wx.EXPAND|wx.ALL, border = 5)

text4 = wx.StaticText(panel, label = "Description")
sizer.Add(text4, pos = (3, 0), flag = wx.ALL, border = 5)

tc4 = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
sizer.Add(tc4, pos = (3,1), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5)
sizer.AddGrowableRow(3)

buttonOk = wx.Button(panel, label = "Ok")
buttonClose = wx.Button(panel, label = "Close" )

sizer.Add(buttonOk, pos = (4, 2),flag = wx.ALL, border = 5)
sizer.Add(buttonClose, pos = (4, 3), flag = wx.ALL, border = 5)

panel.SetSizerAndFit(sizer)

app = wx.App()
Example(None, title = 'GridBag Demo - www.yiibai.com')
app.MainLoop()

上面的代码产生下面的输出 -

c2daf3ff59aa092b52fd0cfdf742be5f.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython GridBagSizer布局

wxPython StaticBoxSizer布局 - WxPython教程™

StaticBoxSizer把一个盒子大小测定器到静态框。它提供了围绕框边界连同在顶部的标签。涉及准备statcboxsizer以下步骤 −

  • 创建一个wx.StaticBox对象。
  • 声明一个wx.StaticBoxSizer与上面的静态框作为其参数。
  • 创建控件并添加到staticbox大小测定器。
  • 设置为大小测定器的框架。

实例

在下面的例子中,两个staticbox大小测定器被创建并添加到顶部垂直框大小测定器,它控制一个frame内部面板的布局。

第一个staticbox大小测定器是围绕一个名为“Name”框。

nm = wx.StaticBox(panel, -1, 'Name:')
nmSizer = wx.StaticBoxSizer(nm, wx.VERTICAL)

横向box大小测定器,持有两个标签和两个文本框,加入到nmSizer静态框中大小测定器。

nmbox = wx.BoxSizer(wx.HORIZONTAL)
fn = wx.StaticText(panel, -1, "First Name")
nmbox.Add(fn, 0, wx.ALL|wx.CENTER, 5)
nm1 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT)
nm2 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT)
ln = wx.StaticText(panel, -1, "Last Name")

nmbox.Add(nm1, 0, wx.ALL|wx.CENTER, 5)
nmbox.Add(ln, 0, wx.ALL|wx.CENTER, 5)
nmbox.Add(nm2, 0, wx.ALL|wx.CENTER, 5)

nmSizer.Add(nmbox, 0, wx.ALL|wx.CENTER, 10)

同样,另一个 staticbox 大小测定器有一个名为“Buttons”静态框。

sbox = wx.StaticBox(panel, -1, 'buttons:')
sboxSizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)

两个按钮的对象,命名为 ‘ok’ 和 ‘cancel’ 都放在一个水平box大小测定器,这反过来,被放置在第二个staticbox大小测定器内。

hbox = wx.BoxSizer(wx.HORIZONTAL)
okButton = wx.Button(panel, -1, 'ok')

hbox.Add(okButton, 0, wx.ALL|wx.LEFT, 10)
cancelButton = wx.Button(panel, -1, 'cancel')

hbox.Add(cancelButton, 0, wx.ALL|wx.LEFT, 10)
sboxSizer.Add(hbox, 0, wx.ALL|wx.LEFT, 10)

两个静态框的大小测定器,‘name’ 和 ‘Buttons’ 被添加到一个垂直box大小测定器充当顶层框架布局管理器。

panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)

vbox.Add(nmSizer,0, wx.ALL|wx.CENTER, 5)
vbox.Add(sboxSizer,0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(vbox)

下面是完整的代码 -

import wx

class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title)

panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
nm = wx.StaticBox(panel, -1, 'Name:')
nmSizer = wx.StaticBoxSizer(nm, wx.VERTICAL)

nmbox = wx.BoxSizer(wx.HORIZONTAL)
fn = wx.StaticText(panel, -1, "First Name")

nmbox.Add(fn, 0, wx.ALL|wx.CENTER, 5)
nm1 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT)
nm2 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT)
ln = wx.StaticText(panel, -1, "Last Name")

nmbox.Add(nm1, 0, wx.ALL|wx.CENTER, 5)
nmbox.Add(ln, 0, wx.ALL|wx.CENTER, 5)
nmbox.Add(nm2, 0, wx.ALL|wx.CENTER, 5)
nmSizer.Add(nmbox, 0, wx.ALL|wx.CENTER, 10)

sbox = wx.StaticBox(panel, -1, 'buttons:')
sboxSizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)

hbox = wx.BoxSizer(wx.HORIZONTAL)
okButton = wx.Button(panel, -1, 'ok')

hbox.Add(okButton, 0, wx.ALL|wx.LEFT, 10)
cancelButton = wx.Button(panel, -1, 'cancel')

hbox.Add(cancelButton, 0, wx.ALL|wx.LEFT, 10)
sboxSizer.Add(hbox, 0, wx.ALL|wx.LEFT, 10)
vbox.Add(nmSizer,0, wx.ALL|wx.CENTER, 5)
vbox.Add(sboxSizer,0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(vbox)
self.Centre()

panel.Fit()
self.Show()

app = wx.App()
Mywin(None, 'Staticboxsizer Demo - www.yiibai.com')
app.MainLoop()

上面的代码产生下面的输出 -

a4b5e158152aae5da0231afde1c39603.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython StaticBoxSizer布局

wxPython布局管理 - WxPython教程™

一个GUI部件可通过指定以像素为单位的绝对坐标放置在容器窗口中。 坐标是相对于它的构造尺寸参数定义的窗口的尺寸大小。窗口中的窗口小部件的位置由它的构造函数的pos参数定义的。

import wx

app = wx.App()
window = wx.Frame(None, title = "wxPython Frame", size = (300,200))
panel = wx.Panel(window)
label = wx.StaticText(panel, label = "Hello World", pos = (100,50))
window.Show(True)
app.MainLoop() 

绝对定位不适合下列原因 −

  • 小部件的位置,如果调整窗口的大小也不会改变。
  • 外观可能不是均匀的,在具有不同的分辨率不同的显示设备。
  • 修改中的布局是困难的,因为它可能需要重新设计整个表格。

wxPython的API提供了布局类的容器内的小部件的定位更优雅的管理。布局管理器使用绝对定位的优点是 -

  • 在窗口中的窗口小部件会自动调整大小。
  • 确保均匀的外观上不同分辨率的显示设备。
  • 添加或去除部件动态地是可能的,而不需要重新设计。

布局管理器在wxPython中被称为Sizer。Wx.Sizer是所有sizer 的基类。让我们来讨论一些重要的sizer ,如wx.BoxSizer,wx.StaticBoxSizer,wx.GridSizer,wx.FlexGridSizer和wx.GridBagSizer。

S.N.

大小测定器和说明

1

BoxSizer

sizer允许控件排放在按行或列的方式。BoxSizer布局是由它的定位参数(wxVERTICAL或wxHORIZONTAL)确定。

2

GridSizer

顾名思义,一个GridSizer对象呈现二维网格。控件被添加在网格槽以左到右和由上到下方顺序。

3

FlexiGridSizer

这种sizer 也有一个二维网格。它提供灵活性布局中的控制单元。

4

GridBagSizer

GridBagSizer是一种多功能sizer。它比FlexiGridSizer提供了更多的增强功能。子构件可被添加到网格中的指定单元格。

5

StaticBoxSizer

StaticBoxSizer把一个盒子sizer放到静态框。它提供了围绕框边界以及顶部标签。


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython布局管理

wxPython Button控件 - WxPython教程™

在任何GUI界面按钮组件的应用最为广泛。它捕获用户生成的点击事件。其最明显的用途是触发绑定到一个处理函数。

wxPython类库提供不同类型的按钮。有一个简单的、传统的按钮,wx.Button类对象带有一些文本作为其标题。 两状态的按钮也可以,它被命名为wx.ToggleButton。其按下或消沉状态可通过事件处理程序函数来识别。

另一种类型的按钮,wx.BitmapButton显示位图(图片)作为它的图标。

构造wx.Button类和wx.ToggleButton类使用以下参数 -

Wx.Button(parent, id, label, pos, size, style)

这些是wx.Button类的一些重要方法-

S.N.

方法和说明

1

SetLabel()

编程设置按钮的标题

2

GetLabel()

返回按钮的标题

3

SetDefault()

按钮设置为默认顶层窗口。模拟click事件按下回车键

wx.ToggleButton类的两种重要的方法是 -

S.N.

方法和说明

1

GetValue()

Returns the state of toggle button (on/off)

2

SetValue()

Sets the state of button programmatically

为了创建位图按钮,首先,位图对象需要被构建图像文件出来。

wx.Bitmap类下面是最常用的构造函数 -

Wx.Bitmap(fiiename, wx.BITMAP_TYPE)

一些预定义的位图类型常量是 -

wx.BITMAP_TYPE_BMP

wx.BITMAP_TYPE_ICO

wx.BITMAP_TYPE_CUR

wx.BITMAP_TYPE_TIFF

wx.BITMAP_TYPE_TIF

wx.BITMAP_TYPE_GIF

wx.BITMAP_TYPE_PNG

wx.BITMAP_TYPE_JPEG

wx.BITMAP_TYPE_PCX

wx.BITMAP_TYPE_ICON

wx.BITMAP_TYPE_ANY

位图(bitmap)对象作为参数wx.BitmapButton类的构造函数中的一个。

Wx.BitmapButton(parent, id, bitmap, pos, size, style) 

在某些操作系统平台上,位图按钮可以显示位图和标签。 SetLabel()方法用于指定标题。在其他平台上,它作为一个内部的标签。正常的按钮,以及位图按钮发出wx.CommandEvent。 EVT_BUTTON绑定器关联一个函数来做处理。

另一方面切换按钮使用wx.TOGGLEBUTTON绑定器来处理事件。

在下面的例子中,所有三种类型的按钮被放置在面板的垂直框大小测定器。

使用语句创建简单的按钮对象 -

self.btn = wx.Button(panel, -1, "click Me")

切换按钮使用下面的语句构造-

self.tbtn = wx.ToggleButton(panel , -1, "click to on")

这些按钮加入到使用以下语句垂直大小测定器 -

vbox.Add(self.btn,0,wx.ALIGN_CENTER)
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)

注 - 由于wx.EXPAND标记时,切换按钮占据着帧的整个宽度。

使用EVT_BUTTON和EVT_TOGGLEBUTTON绑定器使它们各自相关联处理程序。

self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)

三个位图按钮添加到一个横向box大小测定器。这些按钮显示图标,作为它们的标题。

bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

这三个按钮的点击事件是针对OnClicked()方法。

self.bmpbtn.Bind(wx.EVT_BUTTON, self.OnClicked)
self.bmpbtn1.Bind(wx.EVT_BUTTON, self.OnClicked)
self.bmpbtn2.Bind(wx.EVT_BUTTON, self.OnClicked)

这些按钮的内部标签分别设置为新建,打开和保存。

OnClicked()事件处理函数检索源按钮的标签,从而导致click事件。这种标签打印到控制台上。

def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print "Label of pressed button = ",btn

点击切换按钮时OnToggle()触发事件处理程序。其状态由GetValue()方法读取,因此按钮的标题被设置。

def OnToggle(self,event):
state = event.GetEventObject().GetValue()
if state == True:
print "off"
event.GetEventObject().SetLabel("click to off")
else:
print "on"
event.GetEventObject().SetLabel("click to on")

完整的代码列表如下 -

import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (200,150))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)

self.btn = wx.Button(panel,-1,"click Me")
vbox.Add(self.btn,0,wx.ALIGN_CENTER)
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)

self.tbtn = wx.ToggleButton(panel , -1, "click to on")
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)

hbox = wx.BoxSizer(wx.HORIZONTAL)

bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

hbox.Add(self.bmpbtn,0,wx.ALIGN_CENTER)
self.bmpbtn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.bmpbtn.SetLabel("NEW")

bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

hbox.Add(self.bmpbtn1,0,wx.ALIGN_CENTER)
self.bmpbtn1.Bind(wx.EVT_BUTTON,self.OnClicked)
self.bmpbtn1.SetLabel("OPEN")

bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))

hbox.Add(self.bmpbtn2,0,wx.ALIGN_CENTER)
self.bmpbtn2.Bind(wx.EVT_BUTTON,self.OnClicked)
self.bmpbtn2.SetLabel("SAVE")

vbox.Add(hbox,1,wx.ALIGN_CENTER)
panel.SetSizer(vbox)

self.Centre()
self.Show()
self.Fit()

def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print "Label of pressed button = ",btn

def OnToggle(self,event):
state = event.GetEventObject().GetValue()

if state == True:
print "Toggle button state off"
event.GetEventObject().SetLabel("click to off")
else:
print " Toggle button state on"
event.GetEventObject().SetLabel("click to on")

app = wx.App()
Mywin(None, 'Button Demo - www.yiibai.com')
app.MainLoop()

上面的代码产生下面的输出 -
bc48195e6cf157ac1a3d14ec552a4bf4.jpg


Label of pressed button = click Me

Toggle button state off

Toggle button state on

Label of pressed button = NEW

Label of pressed button = OPEN

Label of pressed button = SAVE


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython Button控件

wxPython可停靠窗口 - WxPython教程™

wxAui是wxWidgets API引入作为的高级用户界面库。 Wx.aui.AuiManager在AUI框架的核心类。

AuiManager管理及使用wx.aui.AuiPanelInfo对象,每个面板信息的特定帧相关的窗格。让我们了解PanelInfo对象控件对接和浮动行为的各种属性。

在顶层框架投入浮动窗口包括以下步骤 -

首先,创建一个AuiManager对象。

self.mgr = wx.aui.AuiManager(self)

然后,面板及所需的控件设计。

pnl = wx.Panel(self)
pbox = wx.BoxSizer(wx.HORIZONTAL)
text1 = wx.TextCtrl(pnl, -1, "Dockable", style = wx.NO_BORDER | wx.TE_MULTILINE)
pbox.Add(text1, 1, flag = wx.EXPAND)
pnl.SetSizer(pbox)

AuiPanelInfo需要设置以下参数。

  • 方向 − Top, Bottom, Left, Right, 或 Center
  • 位置 − 多个窗格中可以放置一个可停靠的区域内。每个被赋予位置编号。
  • 行 − 多个窗格中显示在一排。就像一个以上的工具栏出现在同一行中。
  • 层 − 窗格可以放置在层中

使用这种PanelInfo,所设计的面板添加到管理器对象。

info1 = wx.aui.AuiPaneInfo().Bottom()
self.mgr.AddPane(pnl,info1)

顶层窗口的其余部分可能有其他控件。

Dock.py 完整的代码如下 -

import wx
import wx.aui

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title, size = (300,300))

self.mgr = wx.aui.AuiManager(self)

pnl = wx.Panel(self)
pbox = wx.BoxSizer(wx.HORIZONTAL)
text1 = wx.TextCtrl(pnl, -1, "Dockable", style = wx.NO_BORDER | wx.TE_MULTILINE)
pbox.Add(text1, 1, flag = wx.EXPAND)
pnl.SetSizer(pbox)

info1 = wx.aui.AuiPaneInfo().Bottom()
self.mgr.AddPane(pnl, info1)
panel = wx.Panel(self)
text2 = wx.TextCtrl(panel, size = (300,200), style = wx.NO_BORDER | wx.TE_MULTILINE)
box = wx.BoxSizer(wx.HORIZONTAL)
box.Add(text2, 1, flag = wx.EXPAND)

panel.SetSizerAndFit(box)
self.mgr.Update()

self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Centre()
self.Show(True)

def OnClose(self, event):
self.mgr.UnInit()
self.Destroy()

app = wx.App()
Mywin(None,"Dock Demo - www.yiibai.com")
app.MainLoop()

上面的代码产生下面的输出 -
0384d71c10cf5942d060d1833c2ff701.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython可停靠窗口

wxPython多文档界面 - WxPython教程™

一个典型的GUI应用程序可以有多个窗口。标签和堆叠部件一次允许激活一个这样的窗口。然而,很多时候这种方法可能不是有用,因为其他窗口可能是隐藏的。

同时显示多个窗口的一种方法是创建它们作为独立的窗口。这被称为SDI(单文档界面)。这需要更多的存储器资源,每个窗口可以具有其自己的菜单系统,工具栏等等

在wxPython中的MDI框架提供了wx.MDIParentFrame类。其对象充当容器为多个子窗口,每个对象是wx.MDIChildFrame类。

子窗口位于父框架的MDIClientWindow区域。当一个孩子帧添加,父框架的菜单栏将显示包含子窗口按钮排放在级联或平铺方式在菜单。

实例

下面的例子演示MDIParentFrame的用途为顶层窗口。菜单按钮被称为NewWindow增加在客户区的子窗口。多个窗口可以被添加,然后设置为层叠或平铺顺序。

完整的代码如下 -

import wx

class MDIFrame(wx.MDIParentFrame):
def __init__(self):
wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent - www.yiibai.com", size = (600,400))
menu = wx.Menu()
menu.Append(5000, "&New Window")
menu.Append(5001, "&Exit")
menubar = wx.MenuBar()
menubar.Append(menu, "&File")

self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.OnNewWindow, id = 5000)
self.Bind(wx.EVT_MENU, self.OnExit, id = 5001)

def OnExit(self, evt):
self.Close(True)

def OnNewWindow(self, evt):
win = wx.MDIChildFrame(self, -1, "Child Window")
win.Show(True)

app = wx.App()
frame = MDIFrame()
frame.Show()
app.MainLoop()

上面的代码产生下面的输出 -
eaa92eb7cc12f67ab53343a38af30941.jpg



本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython多文档界面

wxPython绘图API - WxPython教程™

GDI+(图形绘制接口),CoreGraphics和Cairo库形成wxPython绘图API的框架。wx.GraphicsContext是主要绘制对象,使用它来创建各种设备上下文对象。

wx.DC是一个抽象类。它的派生类用于渲染的图形和文字在不同的设备。关联设备类 -

  • wx.ScreenDC − 使用它描绘在屏幕上,而不是一个单独的窗口。
  • wx.ClientDC − 使用它描绘在窗口(无边框等装饰的一部分)的客户区域,但不从wxPaintEvent内使用它。
  • wx.PaintDC − 使用它描绘在窗口的客户区域,但只能从wxPaintEvent内。
  • wx.WindowDC − 使用它描绘的窗口,包括装饰的整个区域。这可能不提供对非Windows平台。

wxPython中的绘图API提供不同的功能绘制形状,文字和图像。需要绘制用途,如颜色,画笔,刷子和字体的对象也可以使用GDI类构造。

wx.Colour类

颜色对象表示RGB(红,绿和蓝)的亮度值,每个是在0-255的比例组合。还有一些预定义的颜色对象-

  • wxBLACK
  • wxBLUE
  • wxCYAN
  • wxGREEN
  • wxYELLOW
  • wxLIGHT_GREY
  • wxRED
  • wxWHITE

颜色以RGB值自定义组合形成为wx.Colour对象。

wx.Colour(r,g,b)

wx.Pen类

Pen对象确定的图形像线,矩形,圆等的形状的颜色,宽度和样式

预定义的画笔对象是-

wxBLACK_DASHED_PEN

wxBLACK_PEN

wxBLUE_PEN

wxCYAN_PEN

wxGREEN_PEN

wxYELLOW_PEN

wxGREY_PEN

wxLIGHT_GREY_PEN

wxMEDIUM_GREY_PEN

wxRED_PEN

wxTRANSPARENT_PEN

wxWHITE_PEN

预定义的画笔样式是 -

wx.SOLID

wx.DOT

wx.LONG_DASH

wx.SHORT_DASH

wx.DOT_DASH

wx.TRANSPARENT

wx.Brush 类

Brush是另一个基本图形对象必须填写的形状,如矩形,椭圆形,圆形等的背景

自定义画笔对象需要wx.Colour和画笔的样式参数。以下是预定义的刷样式列表 -

wx.SOLID

wx.STIPPLE

wx.BDIAGONAL_HATCH

wx.CROSSDIAG_HATCH

wx.FDIAGONAL_HATCH

wx.CROSS_HATCH

wx.HORIZONTAL_HATCH

wx.VERTICAL_HATCH

wx.TRANSPARENT

wxPython有许多便于绘制不同的形状,文本和图像的函数。

S.N.

函数与说明

1

DrawRectangle()

按给定尺寸绘制矩形

2

DrawCircle()

用给定的点为中心以及半径绘制一个圆

3

DrawEllipse()

用给定的x和y半径绘制一个椭圆

4

DrawLine()

绘制两个wx.Point对象之间的线

5

DrawBitmap()

在给定的位置绘制图像

6

DrawText()

显示在指定的位置给定的文本

实例

上述函数是在下面的例子中实现的,利用画笔,画笔,颜色和字体的对象。

完整的代码如下 -

import wx

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (500,300))
self.InitUI()

def InitUI(self):
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Centre()
self.Show(True)

def OnPaint(self, e):
dc = wx.PaintDC(self)
brush = wx.Brush("white")
dc.SetBackground(brush)
dc.Clear()

dc.DrawBitmap(wx.Bitmap("python.jpg"),10,10,True)
color = wx.Colour(255,0,0)
b = wx.Brush(color)

dc.SetBrush(b)
dc.DrawCircle(300,125,50)
dc.SetBrush(wx.Brush(wx.Colour(255,255,255)))
dc.DrawCircle(300,125,30)

font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL)
dc.SetFont(font)
dc.DrawText("Hello wxPython",200,10)

pen = wx.Pen(wx.Colour(0,0,255))
dc.SetPen(pen)
dc.DrawLine(200,50,350,50)
dc.SetBrush(wx.Brush(wx.Colour(0,255,0), wx.CROSS_HATCH))
dc.DrawRectangle(380, 15, 90, 60)

ex = wx.App()
Mywin(None,'Drawing Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -

477ab318ca8a526595c0c2a35c3e511f.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython绘图API

wxPython拖放 - WxPython教程™

拖放对用户是非常直观。它在许多桌面应用程序,用户可以复制或只需用鼠标拖动和删除另一个窗口中移动对象从一个窗口到另一个中。

拖放操作包括以下步骤 -

  • 声明拖放目标
  • 创建数据对象
  • 创建 wx.DropSource
  • 执行拖放操作
  • 取消或接受拖放

在wxPython中,有两个预定义拖放目标 -

  • wx.TextDropTarget
  • wx.FileDropTarget

许多wxPython的小部件支持拖放活动。源代码控制必须启用拖动,而目标控制必须在一个位置接受(或拒绝)拖放。

用户拖动源数据放置在目标对象上。目标对象的OnDropText()会消耗数据。如果需要的话,从源对象的数据可以被删除。

实例

在下面的例子中,两个ListCrl对象在Box Sizer水平放置。在左边列表填充了一个 languages[] 的数据。它被指定为拖动源。在右边是目标。

languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript', 'PHP', 'VB.NET','C#']
self.lst1 = wx.ListCtrl(panel, -1, style = wx.LC_LIST)
self.lst2 = wx.ListCtrl(panel, -1, style = wx.LC_LIST)

for lang in languages:
self.lst1.InsertStringItem(0,lang)

第二个列表控件是空的,它是TextDropTarget类对象的参数。

class MyTextDropTarget(wx.TextDropTarget):
def __init__(self, object):
wx.TextDropTarget.__init__(self)
self.object = object

def OnDropText(self, x, y, data):
self.object.InsertStringItem(0, data)

OnDropText()方法添加源数据在目标列表控件。

拖拽操作是由事件绑定器初始化。

wx.EVT_LIST_BEGIN_DRAG(self, self.lst1.GetId(), self.OnDragInit)

OnDragInit()函数将在目标上拖拽数据并从源中删除。

def OnDragInit(self, event):
text = self.lst1.GetItemText(event.GetIndex())
tobj = wx.PyTextDataObject(text)
src = wx.DropSource(self.lst1)
src.SetData(tobj)
src.DoDragDrop(True)
self.lst1.DeleteItem(event.GetIndex())

完整的代码如下 -

import wx

class MyTarget(wx.TextDropTarget):
def __init__(self, object):
wx.TextDropTarget.__init__(self)
self.object = object

def OnDropText(self, x, y, data):
self.object.InsertStringItem(0, data)

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (-1,300))
panel = wx.Panel(self)
box = wx.BoxSizer(wx.HORIZONTAL)
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript',
'PHP', 'VB.NET','C#']

self.lst1 = wx.ListCtrl(panel, -1, style = wx.LC_LIST)
self.lst2 = wx.ListCtrl(panel, -1, style = wx.LC_LIST)
for lang in languages:
self.lst1.InsertStringItem(0,lang)

dt = MyTarget(self.lst2)
self.lst2.SetDropTarget(dt)
wx.EVT_LIST_BEGIN_DRAG(self, self.lst1.GetId(), self.OnDragInit)

box.Add(self.lst1,0,wx.EXPAND)
box.Add(self.lst2, 1, wx.EXPAND)

panel.SetSizer(box)
panel.Fit()
self.Centre()
self.Show(True)

def OnDragInit(self, event):
text = self.lst1.GetItemText(event.GetIndex())
tobj = wx.PyTextDataObject(text)
src = wx.DropSource(self.lst1)
src.SetData(tobj)
src.DoDragDrop(True)
self.lst1.DeleteItem(event.GetIndex())

ex = wx.App()
Mywin(None,'Drag&Drop Demo - www.yiibai.com')
ex.MainLoop()

上面的代码产生下面的输出 -
6c595d074911cb6696d0c25382ec4631.jpg


本站代码下载:http://www.yiibai.com/siteinfo/download.html

本文属作者原创,转载请注明出处:易百教程 » wxPython拖放

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论