wxpython应用程序对象与顶级窗口_wxpython.md

####

> 安装wxpython及其他依赖

```python

#1 安装wxFormBuolder

https://sourceforge.net/projects/wxformbuilder/

#2 安装wxpython

pip install wxPython -i https://pypi.douban.com/simple

#安装pywin32

pip install pywin32 -i https://pypi.douban.com/simple

```

### wxpython入门

#### 1.2.0

开发任一个wxpython程序必须要的五个步骤:

+ 导入必须要的wxpython包

+ 子类化wxpython应用程序

+ 定义一个应用程序的初始方法

+ 创建一个应用程序类的实例

+ 进入这个应用程序的主事件循环

每个wxpython程序必须有一个applocation对象和至少一个frame对象。application对象必须wx.App的一个实例或

你在OnIinit()方法中定义的一个子类的一个实例。当你的应用程序启动的时候,OnInit()方法将被wx.app父类调用。

> 总结:

>

> wxpython程序的实现基于两个必要的对象:应用程序对象和顶级窗口。任何wxpython应用程序都需要去实例化一个wx.App,并且至少有一个顶级窗口。

>

> 应用程序对象包含OnInit()方法,它在启动时被调用。在这个方法中,通常要初始化框架和别的全局对象。wxpython应用程序通常在它的所有顶级窗口被关闭或主事件循环退出时结束。

>

> 应用程序对象也控制wxpython文本输出的位置。默认情况下,wxpython重定向stdout和stderr到一个特定的窗口。这个行为使得诊断启动时产生的错误变得困难了,但是我们可以通过让wxpython把错误消息发送到一个文件或控制台窗口来解决。

1、创建一个wxpython 程序的方式

```python

#子类化wxpython application类

import wx

class MyApp(wx.App):

# 实例化时父类的wx.App会调用OnInit的方法

def OnInit(self):

frame = wx.Frame(parent=None, id=-1, title="Bare")

frame.Show() #默认为True,使框架可见

return True

app = MyApp()

app.MainLoop()

```

#### 2.5.1

wx.Frame是所有框架的父类,框架就是窗口,框架是一个容器,用户可以将它在屏幕上任意的移动,并可将它缩放,

它通常包含诸如标题栏、菜单栏、菜单等等。

```python

#当你创建wx.Frame的子类时,你的类应该调用其父类的构造器wx.Frame.__init__()。wx.Frame的构造器所需的参数如下:

wx.Frame.__init__(parebt,id=-1,title="",pos=wx.DefaultPosistion,size=wx.DefaultSize,style=wx.DEFAULT_FRAME_STYLE,name="frame")

参数的意义:

parent:框架的父窗口。对于顶级的窗口,这个值是None。框架随其父窗口的销毁而销毁。取决于平台,框架可被限制只出现在父窗口的顶部。在多文档界面的情况下,子窗口被限制为只能在父窗口中移动和缩放。

id:关于新窗口的wxPython id号。你可以明确地传递一个。或者传递-1,这将导致wxPython自动生成一个新的ID。wx.ID_OK和wx.ID_CANCEL是对话框中OK和Cancel按键的ID。

title:窗口的标题

pos:一个wx.Point对象,它指定这个新窗口的左上角在屏幕中的位置。在图形用户的界面程序中,通常(0,0)是显示器的左上角。这个默认的(-1,-1)将让系统决定窗口的位置。

size:一个wx.Size对象,它指定了这个窗口的初始尺寸,这个默认的(-1,-1)将让系统决定窗口的初始尺寸。

style:指定窗口的类型的常量。以后使用或运算组合它们。

name:框架的名字。以后你可以使用它来寻找这个窗口。

```

#### 2.7

```python

#消息对话框

dlg = wx.MessageDialog(None,'Is this the coolest thing ever!','MessageDialog',wx.YES_NO|wx.ICON_QUESTION)

result = dlg.ShowModal()

dlg.Destroy()

#API

wx.MessageDialog(parent,message,caption="Message Box",style=wx.OK|wx.CANCEL,pos=wx.DefaultPostion)

#参数说明:

parent:对话框的父窗口,如果对话框是顶级则为None

message:显示在对话框中的字符串

caption:对话框中标题栏中的字符串

pos:对话框出现的位置

showModal()方法将对话框以模式的方式显示,这意味着在对话框关闭之前,应用程序的别的窗口不能响应用户的事件、showModal()返回的是一个整数,返回值为下面常量之一;wx.ID_YES,wx.ID_NO,wx.ID_CANCEL,wx.ID_OK。

```

```python

#文本输入对话框

dlg = wx.TextEntryDialog(None,"Who is buried in Grant's tomb?",'A Question','Cary Grant')

if dlg.ShowModal()==wx.ID_OK:

responese = dlg.GetValue()

#GetValue 获取文本框的值

#SetValue 设置文本框的值

```

```python

#下拉消息列表

dlg = wx.SingleChoiceDialog(None,'What version of Python are you using?','Singel Choice',['1.5.2','2.0','2.1.3','2.2','2.3.1'])

if dlg.ShowModal() == wx.ID_OK:

response = dlg.GetStringSelection()

#获取文本的两种方法:

GetSelection()方法获取用户选项的索引,而GetStringSelection()返回实际所选的字符串。

```

### 3 事件驱动

```python

#常见的事件驱动

wx.CloseEvent:当一个框架关闭时触发。这个事件的类型分为一个通常的框架关闭和一个系统的关闭事件。

wx.CommandEvent:与窗口部件的简单的各种交互将触发这个事件,如按键单击、菜单项选择、单选按钮选择。这些相互有它各自的事件类型

许多更复杂的窗口部件,如列表等则定义wx.CommandEvent的子类。事件处理系统对待命令事件与其他事件不同。

wx.KeyEvent:按键事件。这个事件的类型分按下按键、释放按键、整个按键动作。

wx.MouseEvent:鼠标事件。这个事件的类型分鼠标移动和鼠标敲击。对于哪个鼠标按键被敲击和是单击还是双击都有各自的事件类型。

wx.PainEvent:当窗口的内容需要被重画时触发。

wx.SizeEvent:当窗口的大小或其布局改变时触发。

wx.TimerEvent:可以由类wx.Timer类创建,它是定期的事件。

```

```python

#事件驱动之一的wx.mouseEvent的事件类型

wx.EVT_LEFT_DOWN

wx.EVT_LEFT_UP

wx.EVT_LEFT_DCLICK

wx.EVT_MIDDLE_DOWN

wx.EVT_MIDDLE_UP

wx.EVT_MIDDLE_DCLICK

wx.EVT_RIGHT_DOWN

wx.EVT_RIGHT_UP

wx.EVT_RIGHT_DCLICK

WX.EVT_MOTION #产生用户移动鼠标

wx.ENTER_WINDOW和wx.LEAVE_WINDOW产生于当鼠标进入或离开一个窗口部件时。

wx.EVT_MOUSE_EVENTS 一次绑定所有的鼠标事件到一个函数。

#事件驱动之一的wx.CommandEvent的事件类型

wx.EVT_BUTTON #用于按键的敲击

wx.EVT_MENU #用于菜单项的选择

```

```python

#使用wx.EvtHandler的方法工作方式有两种

#1使用Bind指定类

Bind(event,handler,source=None,id=wx.ID_ANY,id=wx.ID_ANY,id2=wx.ID_ANY)

handler :事件驱动

source:触发这个事件的类或者函数

event:是响应函数

#2 使用Frme实例调用

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

wx.EVT_BUTTON #事件驱动

self.OnClick #响应函数

button #触发事件

#常见的wx.EvtHander的方法:

AddPendingEvent(event):将这个event参数放入事件处理系统中。类似于ProcessEvent(),但它实际上不会立即触发事件的处理。相反,该事件被增加到事件队列中。适用于线程间基于事件的通信。

Bind(event,handler,source=None,id=wx.ID_ANY,id2=wx.ID_ANY)

GetEvtHandlerEnabled()

SetEvtHandlerEnabled(boolean) :如果处理器正在处理事件,则属性为True,否则为False。

ProcessEvent(event):把event对象放入事件处理系统中以便立即处理。

```

> 总结

>

> 所有的wxpython 事件都是wx.Event类的子类,低级的事件,如鼠标敲击,被用来建立高级的事件,如按钮敲击或菜单单项选择。

>

> 事件通常发送给产生它们的对象,以搜索一个绑定对象,这个绑定对象绑定事件都一个处理器函数。如果是命令事件,这个事件沿着容器级向上传递直到一个窗口部件被发现有一个针对该事件类型的处理器。一旦一个时间处理器被发现,对于该事件的处理就停止了,除非这个处理器调用了该事件的所有默认行为。

>

>

### 5 pyGridTableBase的使用

> wx.grid.Grid是用于建立一个表格的的其中:

>

> SetColLabelValue(0,"Filrst") 用于设置一个行标

>

> SetRowLabelValue(0,"CF") 用于设置一个列标

>

> SetCellValue(0,0,"wuzhib") 在表格的位置上设置一个值

```Python

#wx.PyGridTableBase是pyGrid的基类,这个类是抽象的,并且不能呗直接实例化,每次你创建一个PyGridTableBase时,有五个必要的方法必须被定义:

GetNumberRows() : 返回一个表明grid中行数的整数

GetNumberCols():返回一个表明grid中列数的整数

IsEmptyCell(row,col) :如果索引(row,col)锁表示的单元是空的话,返回True。

GetValue(row,col):返回显示在单元(row,col)中的值

SetValue(row,col,value):设置单元(row,col)中的值,如果你想要只读模式,你仍必须包含这个方法,但是你可以

在该函数中使用Pass

```

### 6使用基本的建造部件

#### 在屏幕上绘画

> 使用wx.Window 及其子类进行在屏幕上绘画

#### 在窗口上装饰

##### 添加更新一个状态栏

> 使用CreateStatisBar()方法添加并放置一个状态栏到一个框架的底部,当父框架调整大小的时候,状态栏自动的自我调整大小

>

> 使用SetStatusText()的方法,在状态栏添加文本信息

```python

GetFieldsCount() :得到状态栏域的数量

SetFieldsCount(count): 设置状态栏中域的数量

GetStatusText(field=0): 得到状态域中文本,默认是0域

SetStatusText(text,field=0):设置指定域中的文本,默认是0域

PushStatusText(text,field=0):改变指定的域中的文本为指定的文本,并将改变前的文本压入堆栈的顶部

SetStatusWidths(widths):指定各状态域的宽度,width是一个整数的列表

```

##### 添加菜单

```python

#添加菜单

#先格式化添加菜单的按键和绑定的方法

import wx

from w6_1 import SketchWindow

class SketchFrame(wx.Frame):

def __init__(self, parent):

wx.Frame.__init__(self, parent, -1, "Sketch Frame", size=(800, 600))

self.sketch = SketchWindow(self, -1)

self.sketch.Bind(wx.EVT_MOTION, self.OnSketchMotion)

self.initStatusBar()

self.createMenuBar()

def initStatusBar(self):

self.statusbar = self.CreateStatusBar()

self.statusbar.SetFieldsCount(3)

self.statusbar.SetStatusWidths([-1, -2, -3])

def OnSketchMotion(self, event):

self.statusbar.SetStatusText("Pos:%s" % str(event.GetPosition()), 0)

self.statusbar.SetStatusText("Pos:%s" % len(self.sketch.curLine), 1)

self.statusbar.SetStatusText("Pos:%s" % len(self.sketch.lines), 2)

event.Skip()

#菜单数据

def menuData(self):

return [("&File",(

("&Open", "Open sketch file", self.OnOpen),

("&Save", "Save sketch file", self.OnSave),

("", "", ""),

("&Color", (

("&Black", "", self.OnColor, wx.ITEM_RADIO),

("&Red", "", self.OnColor, wx.ITEM_RADIO),

("&Green", "", self.OnColor, wx.ITEM_RADIO),

("&Blue", "", self.OnColor, wx.ITEM_RADIO))),

("", "", ""), #分隔线

("&Quit", "Quit", self.OnCloseWindow)

))]

def createMenuBar(self):

menuBar = wx.MenuBar()

for eachMenuData in self.menuData():

menuLabel = eachMenuData[0]

menuItems = eachMenuData[1]

menuBar.Append(self.createMenu(menuItems), menuLabel)

self.SetMenuBar(menuBar)

def createMenu(self, menuData):

menu = wx.Menu()

#创建子菜单

for eachItem in menuData:

if len(eachItem) == 2:

label = eachItem[0]

subMenu = self.createMenu(eachItem[1])

menu.AppendMenu(wx.NewId(), label,subMenu)

else:

self.createMenuItem(menu, *eachItem)

return menu

def createMenuItem(self, menu, label, status, handler, kind=wx.ITEM_NORMAL):

if not label:

menu.AppendSeparator()

return

menuItem = menu.Append(-1, label, status, kind) #使用kind创建菜单项

self.Bind(wx.EVT_MENU, handler, menuItem)

def OnNew(self, event):

'''

菜单绑定的方法

'''

pass

def OnOpen(self, evet):

'''

菜单绑定的方法

'''

pass

def OnSave(self, event):

'''

菜单绑定的方法

'''

pass

def OnColor(self, event): #处理颜色的改变

menubar = self.GetMenuBar()

itemId = event.GetId()

item = menubar.FindItemById(itemId)

color = item.GetLabel()

self.sketch.SetColor(color)

def OnCloseWindow(self, event):

self.Destroy()

if __name__=="__main__":

app = wx.App()

frame = SketchFrame(None)

frame.Show()

app.MainLoop()

```

##### 得到标准信息

###### 标准文件对话框

> 标准文件对话框wx.FileDialog

>

> wx.FileDialog(parent,message="Choose a file",defaultDir="",default="",wildcard="*,*",style=0)

>

> parent :对话框的父窗口。如果没有父窗口则为None。

>

> message:message显示在对话框的标题栏中。

>

> defaultDir:当对话框打开时,默认的目录。如果为空,则为当前工作目录。

>

> defaultFile:当对话框打开时,默认选择的文件,如果为空,则没有文件被选择。

>

> wildcard:通配符,指定要选择的文件类型,格式是l,可以指定多种类型的文件。

>

> style :样式:

>

> ​wx.CHANGE_DIR:在用户选择了一个文件之后,当前工作目录相应改变到所选文件所在的目录

>

> ​wx.MULTIPLE:仅适用于打开对话框。这个样式使得用户可以选择多个文件夹。

>

> ​wx.OPEN:这个样式用户打开一个文件夹。

>

> ​wx.OVERWRITE_PROMRT:仅适用于保存文件对话框。显示一个提示信息以确认是否覆盖一个已经存在的文件。

>

> ​wx.SAVE():这个样式用于保存一个文件。

>

>

### 使用基本的控件

#### 显示静态文本

> 使用wx.StaticText来显示静态文本

> wx.StaticText(parent,id,label,pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")

>

>parent:父窗口

>

>id:标识符。使用-1可以自动创建一个唯一的标识

>

>label:你想显示在静态控件中的文本

>

>pos:一个wx.Point或一个python元组,它是窗口的位置

>

>size:一个wx.Size或一个python元组,它是窗口部件的尺寸。

>

>style:样式标记

>

>name:对象的名字,用于查找的需要。

```python

import wx

class StaticTextFrame(wx.Frame):

def __init__(self):

wx.Frame.__init__(self, None, -1, 'Static Text Example', size=(400, 300))

panel = wx.Panel(self, -1)

#这是一个基本的静态文本

wx.StaticText(panel, -1, "This is an example of static text", (100, 10))

#指定了前景色和背景色的静态文本

rev = wx.StaticText(panel, -1, "Static Text With Reversed Colors", (100, 230))

rev.SetForegroundColour('white')

rev.SetBackgroundColour('black')

#指定居中对齐的静态文本

center = wx.StaticText(panel, -1, "align center", (100, 50), (160, -1), wx.ALIGN_CENTER)

center.SetForegroundColour('white')

center.SetBackgroundColour('black')

#指定右对齐的静态文本

right = wx.StaticText(panel, -1, "align right", (100, 70), (160, -1), wx.ALIGN_RIGHT)

right.SetForegroundColour('white')

right.SetBackgroundColour('black')

#指定新字体的静态文本

str = "You can also change the font"

text = wx.StaticText(panel, -1, str, (20, 100))

font = wx.Font(18, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)

text.SetFont(font)

#显示多行的文本

text = "You text\ncan be split\nover multiple lines\n\neven blank ones"

wx.StaticText(panel, -1, text, (20, 150))

#显示堆对齐的多行文本

text = "Multi-line text\ncan also\n be right aligned\n\neven with a blank"

wx.StaticText(panel, -1, text, (220, 150), style=wx.ALIGN_RIGHT)

if __name__=="__main__":

app = wx.App()

frame = StaticTextFrame()

frame.Show()

app.MainLoop()

```

#### 输入文本

> 文本框让用户进行交互使用wx.TextCtrl控件

>wx.TextCtrl(parent,id,value=" ",pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,validator=wx.DefaultValidator,name=wx.TextCtrlNameStr)

>

>#validator:通常用于过滤数据以确保只能键入要接受的数据。

>wx.TextCtrl的样式1

>

>wx.TE_CENTER:控件中文本居中

>

>wx.TE_LEFT:控件中的文本左对齐。默认的行为

>

>wx.TE_NOHIDESEL:文本始终高亮显示,只适用于windows

>

>wx.TE_PASSWORD:不显示所输入的文本,而是以星号代替。

>

>wx.TE_PROCESS_ENTER:如果使用了这个样式,那么当用户在控件内按下回车键时,一个文本事件被触发,否则,按键事件内在由该文本控件或该对话框管理。

>

>wx.TE_PROCESS_TAB:如果指定了这个样式,那么通常的字符事件在TAB键按下时创建(一般意味一个制表符被插入文本)。否则,tab由对话框来管理,通常是控件间的切换。

>

>wx.TE_READOBNLY:文本控件为只读,用户不能修改其中的文本。

>

>wx.TE_RIGHT:控件中的文本右对齐。

>wx.TextCtr的常用方法:

>

>AppendText(text):在尾部添加文本。

>

>Clear():重置控件中的文本为""。并且生成一个文本更新时间。

>

>EmulateKeyPress(event):产生一个按键事件,插入于事件想关联的控制符,就如同实际的按键发生了。

>

>GetInsertionPoint()

>

>SetInsertionPoint(pos)

>

>GetInsertionPointEnd():得到或设置插入点的位置,位置是整型的索引值。控件的开始位置是0

>

>GetRange(from,to):返回控件位置索引范围内的字符串

>

>GetSelection():以元组的形式返回当前所选择的文本的起始位置的索引(开始,结束)。

>

>GetStringSelection():得到所选择的字符串。

>

>SetSelection(from,to):设置所选的文本。

>

>GetValue()返回空间中所有的字符串

>

>SetValue(value):改变控价中的全部文本

>

>Remove(from,to):删除指定范围的文本。

>

>Replace(from,to,value):用给定的值替换指定范围内的文本。这可以改变文本的长度。

>

>WritText(text):和AppemdText()类似,但是写入的文本被放置在当前的插入点。

```python

import wx

class TextFrame(wx.Frame):

def __init__(self):

wx.Frame.__init__(self, None, -1, "Text Entry Example", size=(300, 100))

panel = wx.Panel(self, -1)

basicLabel = wx.StaticText(panel, -1, "Basic Control: ")

basicText = wx.TextCtrl(panel, -1, "I ve entered some text!", size=(175, -1))

basicText.SetInsertionPoint(0)

pwdLabel = wx.StaticText(panel, -1, "Password:")

pwdText = wx.TextCtrl(panel, -1, "password", size=(175, -1), style=wx.TE_PASSWORD)

sizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)

sizer.AddMany([basicLabel, basicText, pwdLabel, pwdText])

panel.SetSizer(sizer)

if __name__=="__main__":

app = wx.App()

frame = TextFrame()

frame.Show()

app.MainLoop()

```

#### 创建一个丰富格式文本

> 使用wx.TE_MULTILINE样式创建一个多行文本控件,也称为丰富格式文本

>wx.HSCROLL:如果文本的控件是多行的,并且如果该样式被声明了,那么长得行将不会自动换行,并显示水平滚动条,该选项在GTK+中被忽略

>

>wx.TE_AUTO_URL:如果丰富文本选择被设置并且平台支持的话,那么当用户的鼠标位于文本中一个URL上或者在该URL上敲击时,这个样式将导致一个事件被生成。

>

>wx.TE_DONTWARAP:wx.HSCROLL的别名

>

>wx.TE_LINEWRAP:对于太长的行,以字符为界换行,某些操作系统可能会忽略该样式

>

>wx.TE_MULTILINE:文本控件将显示多行

>

>wx.TE_RICH:用于window下,丰富文本控件用作基本的窗口部件,这个允许样式文本的使用。

>

>wx.TE_RICH2:用于window下,把最新版本的丰富文本控件用作基本窗口部件。

>

>wx.TE_WORDWRAP:对于太长的行,以单词为界行行,许多操作系统会忽略该样式

> #设置颜色和字体

>

> richText.SetStyle(44,52,wx.TextAttr("white","black")) #设置丰富文本的样式

>

> wx.TextAttr(colText,colBack=wx.NullColor,font=wx.NullFont) #样式格式

>

> #创建一个字体

>

> wx.Font(pointSize,family,style,weight,underline=False,faceName="",encoding=wx.FONTENCODING_DEFAULT)

>

> #pointSite:使用磅为单位的

>

> #family的字体类别:

>

> wx.DECORATIVE:一个正式的,老的英文样式字体

>

> wx.DEFAULT:系统默认字体

>

> wx.MODERN:一个单间隔(固定字符间距)字体

>

> wx.ROMAN:serif字体,通常类似于Times New Roman

>

> wx.SCRIPT:手写或草写

>

> wx.SWISS:sans-sefif字体,通常类似Helvetica或Arial

>

> #style 参数是指明字体是否有倾斜:wx.NORMAL,wx.SLANTT,wx.ITALIC

>

> #weight 指明字体的醒目程度,可选值:wx.NORMAL,wx.LIGHT,wx.BOLD

>

> #underline 是否加下划线,加为True,不加为False

>

> #faceName 指定字体名

>

> #encoding 指定编码方式

```python

#设置丰富文本的方法

GetDefaultStyle():

SetDefaultStyle(style):

GetLineLength(lineNo):返回给定行的长度的整数值

GetLineText(lineNo):返回给定行的文本

GetNumberOfLines():返回控件中的行的数量,对于单行,返回1

IsMultiLine():

IsSingleLine():布尔类型的方法,确定控件状态

PositionToXY(pos):指定文本内的一个整数位置,返回以元组(列,行)形式的索引位置。列和行的索引均以作为开始。

SetStyle(start,end,style):立即改变指定范围文本的样式

ShowPosition(pos):引起一个多行控件的滚动,以便观察到指定位置的内容

XYToPosition(x,Y):与PositionToXY(pos)相反,指定行和列,返回整数值位置

```

```python

import wx

class TextFrame(wx.Frame):

def __init__(self):

wx.Frame.__init__(self, None, -1, "Text Entry Example", size=(300, 250))

panel = wx.Panel(self, -1)

multiLabel = wx.StaticText(panel, -1, "Multi-line")

text = "Here is a looooooooooooooong line of text set in the control.\n\n"

multiText = wx.TextCtrl(panel, -1, text, size=(200, 100), style=wx.TE_MULTILINE)

multiText.SetInsertionPoint(0) #设置插入点

richLabel = wx.StaticText(panel, -1, "Rich Text")

text = "If supported by native control,this is reversed,and this is a different font."

#创建丰富文本控件

richText = wx.TextCtrl(panel, -1, text, size=(200, 100), style=wx.TE_MULTILINE|wx.TE_RICH2)

richText.SetInsertionPoint(0)

richText.SetStyle(44, 52, wx.TextAttr("white", "black")) #设置文本样式

points = richText.GetFont().GetPointSize()

f = wx.Font(points + 3, wx.ROMAN, wx.ITALIC, wx.BOLD, True) #创建一个文本的字体

richText.SetStyle(68, 82, wx.TextAttr("blue", wx.NullColour, f)) #用新字体设置样式

sizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)

sizer.AddMany([multiLabel, multiText, richLabel, richText])

panel.SetSizer(sizer)

if __name__=="__main__":

app = wx.App()

frame = TextFrame()

frame.Show()

app.MainLoop()

```

```python

#wx.TextCtrl的事件

self.Bind(wx.EVT_TEXT,frame.OnText,text)

EVT_TEXT:当控件中的文本改变时产生该事件。文本因用户的输入或在程序中使用SetValue()而被改变,都要产生该事件。

EVT_TEXT_ENTER:当用户在一个wx.TE_PROCESS_ENTER样式文本控件中按下了回车键时,产生该事件。

EVT_TEXT_URL:如果在windows系统上,wx.TE_RICH或wx.RICH2样式被设置,并且wx.TE_AUTO_URL样式也被设置了,那么当在文本控件内URL上发生了一个鼠标事件时,该事件被触发。

EVT_TEXT_MAXLEN:如果使用SetMaxLength()指定了该控件的最大长度,那么当用户试图输入更长得字符串时,该事件被触发。

```

#### 按钮

> 文本按钮、位图按键、开关按钮(toggle buttons)、通用(generic)

##### 生成一个按钮

> wx.Button(parent,id,label,pos,size=wx.DefaultSize,style=0,validator,name="button")

>

> label:显示在按钮上的文本,可以在程序运行的时候使用SetLabel()来改变,并且使用GetLabel()来获取

>

> pos:按键的位于框架的位置,GetDefaultSize()返回系统默认按钮的尺寸。SetDefault()设置按钮为对话框或框架默认的按钮。

>

> name = 按键名称

##### 生成位图

> 位图就是按钮上显示一张图片,而并非一个文本标签,使用wx.BitmapButton来创建一个位图的按钮

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值