python编写交互界面怎么用,python交互界面有什么用

这篇文章主要介绍了python编写交互界面怎么用,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

本篇内容来自https://www.cnblogs.com/ssyfj/p/8976178.html#wxpython的程序结构

目录

主要使用wxPython(最成熟的跨平台python GUI工具包)

前戏:基础了解

WxPython的程序结构

窗口组成:

事件驱动:

常用组件(简单了解,后面还有):

基本组件

1.静态文本框

2.文本输入框

3.按钮控件

4.单选框

5.多选框

6.列表控件

7.使用sizer布局组件

菜单,窗口,对话框组件

菜单

窗口

对话框

窗口和对话框的交互

高级控件

表格控件

高级列表控件

树形控件

树表控件

定时器控件

WxPython库中的高级功能

主要使用wxPython(最成熟的跨平台python GUI工具包)

前戏:基础了解

importwxclass MyFrame(wx.Frame): #创建自定义Frame

def __init__(self,parent):

wx.Frame.__init__(self,parent,id=-1,title="Hello World",size=(300,300)) #设置窗体

"""panel和sizer是wxpython提供的窗口部件。是容器部件,可以用于存放其他窗口部件"""panel=wx.Panel(self)

sizer=wx.BoxSizer(wx.VERTICAL)

panel.SetSizer(sizer)

txt= wx.StaticText(panel,-1,"Hello World!") #创建静态文本组件

sizer.Add(txt,0,wx.TOP|wx.LEFT,100)

self.Center()#将窗口放在桌面环境的中间

app=wx.App()"""Every wx application must have a single ``wx.App`` instance, and all

creation of UI objects should be delayed until after the ``wx.App`` object

has been created in order to ensure that the gui platform and wxWidgets

have been fully initialized."""frame= MyFrame(None) #为顶级窗口

frame.Show(True)

app.MainLoop()

View Code

补充:id是什么:wxpython对每个控件都会分配一个唯一的整数型ID,方便调用,类十余c中的Handlepython自动化运维应用。ID在时间响应中必不可少。

创建控件时如果ID为-1时,会自动分配一个ID。这样就不能对ID进行引用。其实可以使用控件对象的GetId方法进行获取

前提:  唯一ID的生成:wx提供了NewId(),可以生成唯一的id。(若担心重复,可以使用RegisterID检测)

我们想要使用ID,但是程序中控件太多,如何处理

方法一:前置每个控件的ID(自己设置的名称),使用列表生成器生成

[Btn_1_ID,Btn_2_ID,Btn_3_ID] = [wx.NewId() for _init_cj in range(3)]有几个控件就设置循环几次

然后在生成控件时进行调用

方法二:使用类的属性来预先分配,然后控件类对他进行继承,每个控件类句读一个属于他的id属性

WxPython的程序结构

一个WxPython程序一般包含两个对象:应用程序对象和根窗口(可多个)。其中,应用程序对象可以使用wx.App(或子类)实现(用于处理窗口中的事件响应),根窗口可以使用wx.Frame实现。

importwxclass MyFrame(wx.Frame): #创建自定义Frame

def __init__(self,parent):#def __init__(

#self, parent=None, id=None, title=None, pos=None,

#size=None, style=None, name=None)

wx.Frame.__init__(self,parent,id=-1,title="Hello World",size=(300,300)) #设置窗体

panel=wx.Panel(self)

sizer=wx.BoxSizer(wx.VERTICAL)

panel.SetSizer(sizer)

txt= wx.StaticText(panel,-1,"Hello World!") #创建静态文本组件

sizer.Add(txt,0,wx.TOP|wx.LEFT,100)

self.Center()#将窗口放在桌面环境的中间

classMyApp(wx.App):defOnInit(self):print("开始进入事件循环")

self.frame=MyFrame(None)

self.frame.Show(True)return True #需要返回一个布尔型,只有初始返回成功,程序才会继续执行

defOnExit(self):print("事件循环结束")importtime

time.sleep(2)return 0 #返回状态码

app=MyApp()

app.MainLoop()

View Code

其中OnInit方法中是必须的,其将会在事件循环处理之前被系统调用。同样的在事件结束之后调用的方法也存在(OnExit)

两个方法是相对的。例如:开启数据库和断开数据库

窗口组成:

前面的代码中窗口和应用程序似乎没有关联,为什么?

在应用程序对象中,可以通过SetTopWindow方法来设置根窗口。若是没有设置,是因为应用程序会选择窗口列表中的第一个作为根窗口。上面的程序也只有一个窗口,所以没有必要去显示设置。同样使用SetTopWindow也可以改变根窗口

控件的部分构造参数:

参数

说明

parent

父窗口(为None代表为顶级窗口),注意设置父窗口后,在父窗口关闭时,子窗口也会消失

id

上面说过了

title

标题

pos

相对于屏幕的位置默认(-1,-1),自行选择。我们在上面使用center也可以改变窗口在屏幕中的位置

size

大小默认(-1,-1)窗口系统自行选择

style

窗口类型...

name

窗口的内在名字

style风格:

EVT_SIZE =wx.PyEventBinder( wxEVT_SIZE )

EVT_SIZING=wx.PyEventBinder( wxEVT_SIZING )

EVT_MOVE=wx.PyEventBinder( wxEVT_MOVE )

EVT_MOVING=wx.PyEventBinder( wxEVT_MOVING )

EVT_MOVE_START=wx.PyEventBinder( wxEVT_MOVE_START )

EVT_MOVE_END=wx.PyEventBinder( wxEVT_MOVE_END )

EVT_CLOSE=wx.PyEventBinder( wxEVT_CLOSE_WINDOW )

EVT_END_SESSION=wx.PyEventBinder( wxEVT_END_SESSION )

EVT_QUERY_END_SESSION=wx.PyEventBinder( wxEVT_QUERY_END_SESSION )

EVT_PAINT=wx.PyEventBinder( wxEVT_PAINT )

EVT_NC_PAINT=wx.PyEventBinder( wxEVT_NC_PAINT )

EVT_ERASE_BACKGROUND=wx.PyEventBinder( wxEVT_ERASE_BACKGROUND )

EVT_CHAR=wx.PyEventBinder( wxEVT_CHAR )

EVT_KEY_DOWN=wx.PyEventBinder( wxEVT_KEY_DOWN )

EVT_KEY_UP=wx.PyEventBinder( wxEVT_KEY_UP )

EVT_HOTKEY= wx.PyEventBinder( wxEVT_HOTKEY, 1)

EVT_CHAR_HOOK=wx.PyEventBinder( wxEVT_CHAR_HOOK )

EVT_MENU_OPEN=wx.PyEventBinder( wxEVT_MENU_OPEN )

EVT_MENU_CLOSE=wx.PyEventBinder( wxEVT_MENU_CLOSE )

EVT_MENU_HIGHLIGHT= wx.PyEventBinder( wxEVT_MENU_HIGHLIGHT, 1)

EVT_MENU_HIGHLIGHT_ALL=wx.PyEventBinder( wxEVT_MENU_HIGHLIGHT )

EVT_SET_FOCUS=wx.PyEventBinder( wxEVT_SET_FOCUS )

EVT_KILL_FOCUS=wx.PyEventBinder( wxEVT_KILL_FOCUS )

EVT_CHILD_FOCUS=wx.PyEventBinder( wxEVT_CHILD_FOCUS )

EVT_ACTIVATE=wx.PyEventBinder( wxEVT_ACTIVATE )

EVT_ACTIVATE_APP=wx.PyEventBinder( wxEVT_ACTIVATE_APP )

EVT_HIBERNATE=wx.PyEventBinder( wxEVT_HIBERNATE )

EVT_DROP_FILES=wx.PyEventBinder( wxEVT_DROP_FILES )

EVT_INIT_DIALOG=wx.PyEventBinder( wxEVT_INIT_DIALOG )

EVT_SYS_COLOUR_CHANGED=wx.PyEventBinder( wxEVT_SYS_COLOUR_CHANGED )

EVT_DISPLAY_CHANGED=wx.PyEventBinder( wxEVT_DISPLAY_CHANGED )

EVT_SHOW=wx.PyEventBinder( wxEVT_SHOW )

EVT_MAXIMIZE=wx.PyEventBinder( wxEVT_MAXIMIZE )

EVT_ICONIZE=wx.PyEventBinder( wxEVT_ICONIZE )

EVT_NAVIGATION_KEY=wx.PyEventBinder( wxEVT_NAVIGATION_KEY )

EVT_PALETTE_CHANGED=wx.PyEventBinder( wxEVT_PALETTE_CHANGED )

EVT_QUERY_NEW_PALETTE=wx.PyEventBinder( wxEVT_QUERY_NEW_PALETTE )

EVT_WINDOW_CREATE=wx.PyEventBinder( wxEVT_CREATE )

EVT_WINDOW_DESTROY=wx.PyEventBinder( wxEVT_DESTROY )

EVT_SET_CURSOR=wx.PyEventBinder( wxEVT_SET_CURSOR )

EVT_MOUSE_CAPTURE_CHANGED=wx.PyEventBinder( wxEVT_MOUSE_CAPTURE_CHANGED )

EVT_MOUSE_CAPTURE_LOST=wx.PyEventBinder( wxEVT_MOUSE_CAPTURE_LOST )

EVT_LEFT_DOWN=wx.PyEventBinder( wxEVT_LEFT_DOWN )

EVT_LEFT_UP=wx.PyEventBinder( wxEVT_LEFT_UP )

EVT_MIDDLE_DOWN=wx.PyEventBinder( wxEVT_MIDDLE_DOWN )

EVT_MIDDLE_UP=wx.PyEventBinder( wxEVT_MIDDLE_UP )

EVT_RIGHT_DOWN=wx.PyEventBinder( wxEVT_RIGHT_DOWN )

EVT_RIGHT_UP=wx.PyEventBinder( wxEVT_RIGHT_UP )

EVT_MOTION=wx.PyEventBinder( wxEVT_MOTION )

EVT_LEFT_DCLICK=wx.PyEventBinder( wxEVT_LEFT_DCLICK )

EVT_MIDDLE_DCLICK=wx.PyEventBinder( wxEVT_MIDDLE_DCLICK )

EVT_RIGHT_DCLICK=wx.PyEventBinder( wxEVT_RIGHT_DCLICK )

EVT_LEAVE_WINDOW=wx.PyEventBinder( wxEVT_LEAVE_WINDOW )

EVT_ENTER_WINDOW=wx.PyEventBinder( wxEVT_ENTER_WINDOW )

EVT_MOUSEWHEEL=wx.PyEventBinder( wxEVT_MOUSEWHEEL )

EVT_MOUSE_AUX1_DOWN=wx.PyEventBinder( wxEVT_AUX1_DOWN )

EVT_MOUSE_AUX1_UP=wx.PyEventBinder( wxEVT_AUX1_UP )

EVT_MOUSE_AUX1_DCLICK=wx.PyEventBinder( wxEVT_AUX1_DCLICK )

EVT_MOUSE_AUX2_DOWN=wx.PyEventBinder( wxEVT_AUX2_DOWN )

EVT_MOUSE_AUX2_UP=wx.PyEventBinder( wxEVT_AUX2_UP )

EVT_MOUSE_AUX2_DCLICK=wx.PyEventBinder( wxEVT_AUX2_DCLICK )

EVT_MOUSE_EVENTS=wx.PyEventBinder([ wxEVT_LEFT_DOWN,

wxEVT_LEFT_UP,

wxEVT_MIDDLE_DOWN,

wxEVT_MIDDLE_UP,

wxEVT_RIGHT_DOWN,

wxEVT_RIGHT_UP,

wxEVT_MOTION,

wxEVT_LEFT_DCLICK,

wxEVT_MIDDLE_DCLICK,

wxEVT_RIGHT_DCLICK,

wxEVT_ENTER_WINDOW,

wxEVT_LEAVE_WINDOW,

wxEVT_MOUSEWHEEL,

wxEVT_AUX1_DOWN,

wxEVT_AUX1_UP,

wxEVT_AUX1_DCLICK,

wxEVT_AUX2_DOWN,

wxEVT_AUX2_UP,

wxEVT_AUX2_DCLICK,

])#Scrolling from wxWindow (sent to wxScrolledWindow)

EVT_SCROLLWIN =wx.PyEventBinder([ wxEVT_SCROLLWIN_TOP,

wxEVT_SCROLLWIN_BOTTOM,

wxEVT_SCROLLWIN_LINEUP,

wxEVT_SCROLLWIN_LINEDOWN,

wxEVT_SCROLLWIN_PAGEUP,

wxEVT_SCROLLWIN_PAGEDOWN,

wxEVT_SCROLLWIN_THUMBTRACK,

wxEVT_SCROLLWIN_THUMBRELEASE,

])

EVT_SCROLLWIN_TOP=wx.PyEventBinder( wxEVT_SCROLLWIN_TOP )

EVT_SCROLLWIN_BOTTOM=wx.PyEventBinder( wxEVT_SCROLLWIN_BOTTOM )

EVT_SCROLLWIN_LINEUP=wx.PyEventBinder( wxEVT_SCROLLWIN_LINEUP )

EVT_SCROLLWIN_LINEDOWN=wx.PyEventBinder( wxEVT_SCROLLWIN_LINEDOWN )

EVT_SCROLLWIN_PAGEUP=wx.PyEventBinder( wxEVT_SCROLLWIN_PAGEUP )

EVT_SCROLLWIN_PAGEDOWN=wx.PyEventBinder( wxEVT_SCROLLWIN_PAGEDOWN )

EVT_SCROLLWIN_THUMBTRACK=wx.PyEventBinder( wxEVT_SCROLLWIN_THUMBTRACK )

EVT_SCROLLWIN_THUMBRELEASE=wx.PyEventBinder( wxEVT_SCROLLWIN_THUMBRELEASE )#Scrolling from wx.Slider and wx.ScrollBar

EVT_SCROLL =wx.PyEventBinder([ wxEVT_SCROLL_TOP,

wxEVT_SCROLL_BOTTOM,

wxEVT_SCROLL_LINEUP,

wxEVT_SCROLL_LINEDOWN,

wxEVT_SCROLL_PAGEUP,

wxEVT_SCROLL_PAGEDOWN,

wxEVT_SCROLL_THUMBTRACK,

wxEVT_SCROLL_THUMBRELEASE,

wxEVT_SCROLL_CHANGED,

])

EVT_SCROLL_TOP=wx.PyEventBinder( wxEVT_SCROLL_TOP )

EVT_SCROLL_BOTTOM=wx.PyEventBinder( wxEVT_SCROLL_BOTTOM )

EVT_SCROLL_LINEUP=wx.PyEventBinder( wxEVT_SCROLL_LINEUP )

EVT_SCROLL_LINEDOWN=wx.PyEventBinder( wxEVT_SCROLL_LINEDOWN )

EVT_SCROLL_PAGEUP=wx.PyEventBinder( wxEVT_SCROLL_PAGEUP )

EVT_SCROLL_PAGEDOWN=wx.PyEventBinder( wxEVT_SCROLL_PAGEDOWN )

EVT_SCROLL_THUMBTRACK=wx.PyEventBinder( wxEVT_SCROLL_THUMBTRACK )

EVT_SCROLL_THUMBRELEASE=wx.PyEventBinder( wxEVT_SCROLL_THUMBRELEASE )

EVT_SCROLL_CHANGED=wx.PyEventBinder( wxEVT_SCROLL_CHANGED )

EVT_SCROLL_ENDSCROLL=EVT_SCROLL_CHANGED#Scrolling from wx.Slider and wx.ScrollBar, with an id

EVT_COMMAND_SCROLL =wx.PyEventBinder([ wxEVT_SCROLL_TOP,

wxEVT_SCROLL_BOTTOM,

wxEVT_SCROLL_LINEUP,

wxEVT_SCROLL_LINEDOWN,

wxEVT_SCROLL_PAGEUP,

wxEVT_SCROLL_PAGEDOWN,

wxEVT_SCROLL_THUMBTRACK,

wxEVT_SCROLL_THUMBRELEASE,

wxEVT_SCROLL_CHANGED,

],1)

EVT_COMMAND_SCROLL_TOP= wx.PyEventBinder( wxEVT_SCROLL_TOP, 1)

EVT_COMMAND_SCROLL_BOTTOM= wx.PyEventBinder( wxEVT_SCROLL_BOTTOM, 1)

EVT_COMMAND_SCROLL_LINEUP= wx.PyEventBinder( wxEVT_SCROLL_LINEUP, 1)

EVT_COMMAND_SCROLL_LINEDOWN= wx.PyEventBinder( wxEVT_SCROLL_LINEDOWN, 1)

EVT_COMMAND_SCROLL_PAGEUP= wx.PyEventBinder( wxEVT_SCROLL_PAGEUP, 1)

EVT_COMMAND_SCROLL_PAGEDOWN= wx.PyEventBinder( wxEVT_SCROLL_PAGEDOWN, 1)

EVT_COMMAND_SCROLL_THUMBTRACK= wx.PyEventBinder( wxEVT_SCROLL_THUMBTRACK, 1)

EVT_COMMAND_SCROLL_THUMBRELEASE= wx.PyEventBinder( wxEVT_SCROLL_THUMBRELEASE, 1)

EVT_COMMAND_SCROLL_CHANGED= wx.PyEventBinder( wxEVT_SCROLL_CHANGED, 1)

EVT_COMMAND_SCROLL_ENDSCROLL=EVT_COMMAND_SCROLL_CHANGED

EVT_BUTTON= wx.PyEventBinder( wxEVT_BUTTON, 1)

EVT_CHECKBOX= wx.PyEventBinder( wxEVT_CHECKBOX, 1)

EVT_CHOICE= wx.PyEventBinder( wxEVT_CHOICE, 1)

EVT_LISTBOX= wx.PyEventBinder( wxEVT_LISTBOX, 1)

EVT_LISTBOX_DCLICK= wx.PyEventBinder( wxEVT_LISTBOX_DCLICK, 1)

EVT_MENU= wx.PyEventBinder( wxEVT_MENU, 1)

EVT_MENU_RANGE= wx.PyEventBinder( wxEVT_MENU, 2)

EVT_SLIDER= wx.PyEventBinder( wxEVT_SLIDER, 1)

EVT_RADIOBOX= wx.PyEventBinder( wxEVT_RADIOBOX, 1)

EVT_RADIOBUTTON= wx.PyEventBinder( wxEVT_RADIOBUTTON, 1)

EVT_SCROLLBAR= wx.PyEventBinder( wxEVT_SCROLLBAR, 1)

EVT_VLBOX= wx.PyEventBinder( wxEVT_VLBOX, 1)

EVT_COMBOBOX= wx.PyEventBinder( wxEVT_COMBOBOX, 1)

EVT_TOOL= wx.PyEventBinder( wxEVT_TOOL, 1)

EVT_TOOL_RANGE= wx.PyEventBinder( wxEVT_TOOL, 2)

EVT_TOOL_RCLICKED= wx.PyEventBinder( wxEVT_TOOL_RCLICKED, 1)

EVT_TOOL_RCLICKED_RANGE= wx.PyEventBinder( wxEVT_TOOL_RCLICKED, 2)

EVT_TOOL_ENTER= wx.PyEventBinder( wxEVT_TOOL_ENTER, 1)

EVT_TOOL_DROPDOWN= wx.PyEventBinder( wxEVT_TOOL_DROPDOWN, 1)

EVT_CHECKLISTBOX= wx.PyEventBinder( wxEVT_CHECKLISTBOX, 1)

EVT_COMBOBOX_DROPDOWN= wx.PyEventBinder( wxEVT_COMBOBOX_DROPDOWN , 1)

EVT_COMBOBOX_CLOSEUP= wx.PyEventBinder( wxEVT_COMBOBOX_CLOSEUP , 1)

EVT_COMMAND_LEFT_CLICK= wx.PyEventBinder( wxEVT_COMMAND_LEFT_CLICK, 1)

EVT_COMMAND_LEFT_DCLICK= wx.PyEventBinder( wxEVT_COMMAND_LEFT_DCLICK, 1)

EVT_COMMAND_RIGHT_CLICK= wx.PyEventBinder( wxEVT_COMMAND_RIGHT_CLICK, 1)

EVT_COMMAND_RIGHT_DCLICK= wx.PyEventBinder( wxEVT_COMMAND_RIGHT_DCLICK, 1)

EVT_COMMAND_SET_FOCUS= wx.PyEventBinder( wxEVT_COMMAND_SET_FOCUS, 1)

EVT_COMMAND_KILL_FOCUS= wx.PyEventBinder( wxEVT_COMMAND_KILL_FOCUS, 1)

EVT_COMMAND_ENTER= wx.PyEventBinder( wxEVT_COMMAND_ENTER, 1)

EVT_HELP= wx.PyEventBinder( wxEVT_HELP, 1)

EVT_HELP_RANGE= wx.PyEventBinder( wxEVT_HELP, 2)

EVT_DETAILED_HELP= wx.PyEventBinder( wxEVT_DETAILED_HELP, 1)

EVT_DETAILED_HELP_RANGE= wx.PyEventBinder( wxEVT_DETAILED_HELP, 2)

EVT_IDLE=wx.PyEventBinder( wxEVT_IDLE )

EVT_UPDATE_UI= wx.PyEventBinder( wxEVT_UPDATE_UI, 1)

EVT_UPDATE_UI_RANGE= wx.PyEventBinder( wxEVT_UPDATE_UI, 2)

EVT_CONTEXT_MENU=wx.PyEventBinder( wxEVT_CONTEXT_MENU )

EVT_THREAD=wx.PyEventBinder( wxEVT_THREAD )

EVT_WINDOW_MODAL_DIALOG_CLOSED=wx.PyEventBinder( wxEVT_WINDOW_MODAL_DIALOG_CLOSED )

EVT_JOY_BUTTON_DOWN=wx.PyEventBinder( wxEVT_JOY_BUTTON_DOWN )

EVT_JOY_BUTTON_UP=wx.PyEventBinder( wxEVT_JOY_BUTTON_UP )

EVT_JOY_MOVE=wx.PyEventBinder( wxEVT_JOY_MOVE )

EVT_JOY_ZMOVE=wx.PyEventBinder( wxEVT_JOY_ZMOVE )

EVT_JOYSTICK_EVENTS=wx.PyEventBinder([ wxEVT_JOY_BUTTON_DOWN,

wxEVT_JOY_BUTTON_UP,

wxEVT_JOY_MOVE,

wxEVT_JOY_ZMOVE,

])#deprecated wxEVT aliases

wxEVT_COMMAND_BUTTON_CLICKED =wxEVT_BUTTON

wxEVT_COMMAND_CHECKBOX_CLICKED=wxEVT_CHECKBOX

wxEVT_COMMAND_CHOICE_SELECTED=wxEVT_CHOICE

wxEVT_COMMAND_LISTBOX_SELECTED=wxEVT_LISTBOX

wxEVT_COMMAND_LISTBOX_DOUBLECLICKED=wxEVT_LISTBOX_DCLICK

wxEVT_COMMAND_CHECKLISTBOX_TOGGLED=wxEVT_CHECKLISTBOX

wxEVT_COMMAND_MENU_SELECTED=wxEVT_MENU

wxEVT_COMMAND_TOOL_CLICKED=wxEVT_TOOL

wxEVT_COMMAND_SLIDER_UPDATED=wxEVT_SLIDER

wxEVT_COMMAND_RADIOBOX_SELECTED=wxEVT_RADIOBOX

wxEVT_COMMAND_RADIOBUTTON_SELECTED=wxEVT_RADIOBUTTON

wxEVT_COMMAND_SCROLLBAR_UPDATED=wxEVT_SCROLLBAR

wxEVT_COMMAND_VLBOX_SELECTED=wxEVT_VLBOX

wxEVT_COMMAND_COMBOBOX_SELECTED=wxEVT_COMBOBOX

wxEVT_COMMAND_TOOL_RCLICKED=wxEVT_TOOL_RCLICKED

wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED=wxEVT_TOOL_DROPDOWN

wxEVT_COMMAND_TOOL_ENTER=wxEVT_TOOL_ENTER

wxEVT_COMMAND_COMBOBOX_DROPDOWN=wxEVT_COMBOBOX_DROPDOWN

wxEVT_COMMAND_COMBOBOX_CLOSEUP= wxEVT_COMBOBOX_CLOSEUP

所有支持的事件类型(上百个)

一个事件是wx.Event类或其子类的一个实例。

事件的绑定和处理:通过使用wx.EvtHandler类中的Bind方法可以将绑定事件的类型,事件对象和事件处理函数关联起来

def Bind(self, event, handler, source=None, id=-1, id2=-1): #reliably restored by inspect

"""Bind an event to an event handler.

:param event: One of the ``EVT_*`` event binder objects that

specifies the type of event to bind.

:param handler: A callable object to be invoked when the

event is delivered to self. Pass ``None`` to

disconnect an event handler.

:param source: Sometimes the event originates from a

different window than self, but you still

want to catch it in self. (For example, a

button event delivered to a frame.) By

passing the source of the event, the event

handling system is able to differentiate

between the same event type from different

controls.

:param id: Used to spcify the event source by ID instead

of instance.

:param id2: Used when it is desirable to bind a handler

to a range of IDs, such as with EVT_MENU_RANGE."""

pass

def Bind(self, event, handler, source=None, id=-1, id2=-1)

importwxclass MyFrame(wx.Frame): #创建自定义Frame

def __init__(self,parent):#def __init__(

#self, parent=None, id=None, title=None, pos=None,

#size=None, style=None, name=None)

wx.Frame.__init__(self,parent,id=-1,title="Hello World",size=(300,300),pos=(0,0)) #设置窗体

panel=wx.Panel(self)

sizer=wx.BoxSizer(wx.VERTICAL)

panel.SetSizer(sizer)

txt= wx.StaticText(panel,-1,"Hello World!") #创建静态文本组件

sizer.Add(txt,0,wx.TOP|wx.LEFT,100)

btn= wx.Button(panel,-1,"Quit")

sizer.Add(btn,0,wx.TOP|wx.LEFT,100)

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

self.Center()#将窗口放在桌面环境的中间

def OnClick(self,event): #注意事件处理函数需要加上事件对象

print("我被点击了")

self.Close(True)#强制退出force=True

classMyApp(wx.App):defOnInit(self):print("开始进入事件循环")

self.frame=MyFrame(None)

self.frame.Show(True)

self.frame.GetId()return True #需要返回一个布尔型,只有初始返回成功,程序才会继续执行

defOnExit(self):print("事件循环结束")importtime

time.sleep(2)return 0 #返回状态码

app=MyApp()

app.MainLoop()

事件绑定和处理的演示

importwxclass MyFrame(wx.Frame): #创建自定义Frame

def __init__(self,parent):#def __init__(

#self, parent=None, id=None, title=None, pos=None,

#size=None, style=None, name=None)

wx.Frame.__init__(self,parent,id=-1,title="Hello World",size=(300,300),pos=(0,0)) #设置窗体

panel=wx.Panel(self)

sizer=wx.BoxSizer(wx.VERTICAL)

panel.SetSizer(sizer)

txt= wx.StaticText(panel,-1,"Hello World!") #创建静态文本组件

sizer.Add(txt,0,wx.TOP|wx.LEFT,100)

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

sizer.Add(self.btn,0,wx.TOP|wx.LEFT,100)#self.Bind(wx.EVT_BUTTON,self.OnClick,self.btn)

#self.Bind(wx.EVT_ENTER_WINDOW,self.OnEnterWindow,self.btn)

self.btn.Bind(wx.EVT_ENTER_WINDOW,self.OnEnterWindow) #绑定鼠标进入事件

self.btn.Bind(wx.EVT_ENTER_WINDOW,self.OnEnterWindow2) #绑定鼠标进入事件

self.btn.Bind(wx.EVT_LEAVE_WINDOW,self.OnLeaveWindow) #绑定鼠标离开事件

self.Center()#将窗口放在桌面环境的中间

defOnEnterWindow(self,event):print("鼠标进入")

self.btn.SetLabel("鼠标进入")#event.Skip()

defOnEnterWindow2(self,event):print("鼠标进入2")

self.btn.SetLabel("鼠标进入2")

event.Skip()defOnLeaveWindow(self,event):print("鼠标离开")

self.btn.SetLabel("鼠标离开")

event.Skip()#一般窗口不见处理完一个事件完毕后,事件处理就结束了,如果要继续处理的话就可以使用Skip方法来改变默认的行为

def OnClick(self,event): #注意事件处理函数需要加上事件对象

print("我被点击了")

self.Close(True)#强制退出force=True

classMyApp(wx.App):defOnInit(self):print("开始进入事件循环")

self.frame=MyFrame(None)

self.frame.Show(True)

self.frame.GetId()return True #需要返回一个布尔型,只有初始返回成功,程序才会继续执行

defOnExit(self):print("事件循环结束")importtime

time.sleep(2)return 0 #返回状态码

app=MyApp()

app.MainLoop()

为一个控件绑定多个事件

补充:

在上面我们使用两种方法为Button按钮绑定了事件。有什么区别?

self.Bind(wx.EVT_BUTTON,self.OnClick,self.btn)  #点击事件

self.btn.Bind(wx.EVT_ENTER_WINDOW,self.OnEnterWindow) #绑定鼠标进入事件

方式一:是是由父控件为子控件绑定的事件

方式二:是使用控件自己绑定事件

那么两者有何不同,可以混用吗

#self.Bind(wx.EVT_ENTER_WINDOW,self.OnEnterWindow,self.btn)

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

答案是:父类去绑定其他事件是不允许的,错误的,会导致父控件为其绑定的所有事件失效。而子类是可以绑定所有的相关事件的。

查看事件对象:

EVT_控件名 = wx.pyEventBinder( wxEVT_BUTTON, exceptedIDs)  exceptedIDs默认为0,这类控件几乎都不为0,自己有定义EVT_BUTTON = wx.PyEventBinder( wxEVT_BUTTON, 1)

EVT_CHECKBOX= wx.PyEventBinder( wxEVT_CHECKBOX, 1)

EVT_CHOICE= wx.PyEventBinder( wxEVT_CHOICE, 1)

EVT_LISTBOX= wx.PyEventBinder( wxEVT_LISTBOX, 1)

EVT_LISTBOX_DCLICK= wx.PyEventBinder( wxEVT_LISTBOX_DCLICK, 1)

EVT_MENU= wx.PyEventBinder( wxEVT_MENU, 1)

EVT_MENU_RANGE= wx.PyEventBinder( wxEVT_MENU, 2)

EVT_SLIDER= wx.PyEventBinder( wxEVT_SLIDER, 1)

EVT_RADIOBOX= wx.PyEventBinder( wxEVT_RADIOBOX, 1)

EVT_RADIOBUTTON= wx.PyEventBinder( wxEVT_RADIOBUTTON, 1)

............

View Code

这一类事件都是对应控件去响应的,也就是说父类中包含这些控件的话,可以对其直接绑定这些基础事件响应。

所以说:要想使用父控件对子控件绑定事件:事件必须满足 EVT_控件名 相对应<

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值