在这篇文章中,我们将带领您了解wxpython—线程和窗口事件的全貌,包括wxpython多线程的相关情况。同时,我们还将为您介绍有关pip安装工具-python(ui:wxpython)、pytho
在这篇文章中,我们将带领您了解wxpython —线程和窗口事件的全貌,包括wxpython多线程的相关情况。同时,我们还将为您介绍有关pip安装工具-python (ui:wxpython)、python wxPython 5 (框架 wx.Frame)、Python 界面生成器 wxFormBuilder 的入门使用(wxPython的界面设计工具的初学笔记)、Python中的GUI库wxPython详解的知识,以帮助您更好地理解这个主题。
本文目录一览:- wxpython —线程和窗口事件(wxpython多线程)
- pip安装工具-python (ui:wxpython)
- python wxPython 5 (框架 wx.Frame)
- Python 界面生成器 wxFormBuilder 的入门使用(wxPython的界面设计工具的初学笔记)
- Python中的GUI库wxPython详解
wxpython —线程和窗口事件(wxpython多线程)
我有一个wxPython应用程序(http://www.OpenSTV.org),该应用程序使用具有多个回合的方法来计算选票。我想做两件事:
(1)对于大量投票,这可能会有点慢,所以我想向用户显示一个进度对话框,这样他就不会认为应用程序被冻结了。
(2)我想允许用户手动断开联系,这需要计数代码才能显示对话窗口。
为了实现(1),我创建了一个线程来运行计数代码,这使我可以向用户展示一个不错的进度对话框。
但是,这样做的问题是计数代码不是主线程,只有wxPython中的主线程才能处理窗口事件。
我想我可以创建一个线程来运行进度对话框,但这似乎很尴尬。是否有更好的方法同时完成(1)和(2)?
pip安装工具-python (ui:wxpython)
python的灵活性就在于它有很多第三方库(框架),而要使用pip安装的话,默认使用国外源,下载超慢,,所以我制作了一个基于wxpython框架的pip安装工具,集合了国内知名的六个镜像源,下载超快,分享给大家。为了方便,使用吾爱的wxpython可视化编辑器来设置ui,有不足的地方,希望多多指教。
main.py:
# -*- coding:utf-8 -*-
import os
import sys
import wx
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='pip安装工具', size=(479, 324),name='frame',style=541072384)
self.启动窗口 = wx.Panel(self)
self.Centre()
self.window_name_lable = wx.StaticText(self.启动窗口,size=(271, 36),pos=(82, 11),label='pip安装工具',name='window_name_lable',style=2321)
window_name_lable_字体 = wx.Font(15,74,90,400,False,'Microsoft YaHei UI',28)
self.window_name_lable.SetFont(window_name_lable_字体)
self.组合框2 = wx.ComboBox(self.启动窗口,value='',pos=(105, 55),name='comboBox',choices=['豆瓣源', '清华源', '阿里云', '中科大', '山东理工大学', '华中理工大学', ''],style=16)
self.组合框2.SetSize((113, 21))
self.标签2 = wx.StaticText(self.启动窗口,size=(89, 25),pos=(19, 55),label='安装镜像源:',name='staticText',style=2321)
self.分组单选框2 = wx.RadioBox(self.启动窗口,size=(182, 60),pos=(268, 55),label='选择地区',choices=['国内源', '国外源(普通)'],majorDimension=0,name='radioBox',style=4)
self.分组单选框2.Bind(wx.EVT_RAdioBox,self.分组单选框2_选项被单击)
self.标签3 = wx.StaticText(self.启动窗口,size=(420, 18),pos=(25, 124),label='想要安装的python库,存在多个,用空格隔开,镜像源选择指的是国内的',name='staticText',style=2321)
self.ku = wx.TextCtrl(self.启动窗口,size=(441, 83),pos=(14, 147),value='',name='ku',style=1073741856)
self.pip_install_start = wx.Button(self.启动窗口,size=(75, 33),pos=(36, 236),label='开始',name='button')
self.pip_install_start.SetForegroundColour((255, 0, 0, 255))
self.pip_install_start.Bind(wx.EVT_BUTTON,self.pip_install_start_按钮被单击)
self.pip_close = wx.Button(self.启动窗口,size=(75, 33),pos=(297, 236),label='关闭',name='pip_close')
self.pip_close.Bind(wx.EVT_BUTTON,self.pip_close_按钮被单击)
def 分组单选框2_选项被单击(self,event):
print('分组单选框2,选项被单击')
def pip_install_start_按钮被单击(self,event):
#print('pip_install_start,按钮被单击')
pip_yuan = self.组合框2.GetSelection()
pip_yuan += 1
pip_diqu = self.分组单选框2.GetSelection()
pip_install_name = self.ku.GetValue()
print(pip_install_name)
pip_yuan_int = int(pip_yuan)
pip_diqu_int = int(pip_diqu)
if pip_diqu_int == 0:
print('国内源')
if pip_yuan_int == -1:
wx.MessageBox("请选择一个镜像源!", "pip安装工具", wx.OK | wx.ICON_informatION)
if pip_yuan_int == 1:#豆瓣源
wx.MessageBox("准备安装,豆瓣源,按“ok”开始,请查看控制台。如果报错,请查看是否输入有误或pip工具出错", "pip安装工具", wx.OK | wx.ICON_informatION)
os.system('python -m pip install '+pip_install_name+' -i https://pypi.douban.com/simple/')
wx.MessageBox("安装完成", "pip安装工具", wx.OK | wx.ICON_informatION)
if pip_yuan_int == 2:#清华源
wx.MessageBox("准备安装,清华源,按“ok”开始,请查看控制台。如果报错,请查看是否输入有误或pip工具出错", "pip安装工具", wx.OK | wx.ICON_informatION)
os.system('python -m pip install '+pip_install_name+' -i https://pypi.tuna.tsinghua.edu.cn/simple')
wx.MessageBox("安装完成", "pip安装工具", wx.OK | wx.ICON_informatION)
if pip_yuan_int == 3:#阿里云
wx.MessageBox("准备安装,阿里云,按“ok”开始,请查看控制台。如果报错,请查看是否输入有误或pip工具出错", "pip安装工具", wx.OK | wx.ICON_informatION)
os.system('python -m pip install '+pip_install_name+' -i http://mirrors.aliyun.com/pypi/simple/')
wx.MessageBox("安装完成", "pip安装工具", wx.OK | wx.ICON_informatION)
if pip_yuan_int == 4:#中科大
wx.MessageBox("准备安装,中科大,按“ok”开始,请查看控制台。如果报错,请查看是否输入有误或pip工具出错", "pip安装工具", wx.OK | wx.ICON_informatION)
os.system('python -m pip install '+pip_install_name+' -i https://pypi.mirrors.ustc.edu.cn/simple/')
wx.MessageBox("安装完成", "pip安装工具", wx.OK | wx.ICON_informatION)
if pip_yuan_int == 5:#山东理工大学
wx.MessageBox("准备安装,山东理工大学,按“ok”开始,请查看控制台。如果报错,请查看是否输入有误或pip工具出错", "pip安装工具", wx.OK | wx.ICON_informatION)
os.system('python -m pip install '+pip_install_name+' -i http://pypi.sdutlinux.org/')
wx.MessageBox("安装完成", "pip安装工具", wx.OK | wx.ICON_informatION)
if pip_yuan_int == 6:#华中理工大学
wx.MessageBox("准备安装,华中理工大学,按“ok”开始,请查看控制台。如果报错,请查看是否输入有误或pip工具出错", "pip安装工具", wx.OK | wx.ICON_informatION)
os.system('python -m pip install '+pip_install_name+' -i http://pypi.hustunique.com/')
wx.MessageBox("安装完成", "pip安装工具", wx.OK | wx.ICON_informatION)
if pip_diqu_int == 2:
wx.MessageBox("准备安装,国外源,按“ok”开始,请查看控制台。如果报错,请查看是否输入有误或pip工具出错。国内使用尽量选国内,网速更快。", "pip安装工具", wx.OK | wx.ICON_informatION)
os.system('python -m pip install '+pip_install_name)
wx.MessageBox("安装成功", "pip安装工具", wx.OK | wx.ICON_informatION)
def pip_close_按钮被单击(self,event):
sys.exit()
class myApp(wx.App):
def OnInit(self):
self.frame = Frame()
self.frame.Show(True)
return True
if __name__ == '__main__':
app = myApp()
app.MainLoop()
效果如下:
GitHub地址:
附拓展:wxpython鼠标样式
详细文档:https://wxpython.org/Phoenix/docs/html/wx.StockCursor.enumeration.html
样式:
wx.CURSOR_NONE
wx.CURSOR_MAX
wx.CURSOR_ARROW 标准箭头光标。
wx.CURSOR_RIGHT_ARROW 指向右侧的标准箭头光标。
wx.CURSOR_bullseye 靶心光标。
wx.CURSOR_CHAR 矩形字符光标。
wx.CURSOR_CROSS 十字光标。
wx.CURSOR_HAND 手形光标。
wx.CURSOR_IBEAM 工字梁光标(垂直线)。
wx.CURSOR_LEFT_BUTTON 表示鼠标左键按下。
wx.CURSOR_MAGNIFIER 放大镜图标。
wx.CURSOR_MIDDLE_BUTTON 表示按下中间按钮的鼠标。
wx.CURSOR_NO_ENTRY 不可输入的符号光标。
wx.CURSOR_PAINT_Brush 画笔光标。
wx.CURSOR_PENCIL 铅笔光标。
wx.CURSOR_POINT_LEFT 指向左的光标。
wx.CURSOR_POINT_RIGHT 指向右的光标。
wx.CURSOR_QUESTION_ARROW 箭头和问号。
wx.CURSOR_RIGHT_BUTTON 表示按下了右键的鼠标。
wx.CURSOR_SIZEnesW 调整大小的光标指向NE-SW。
wx.CURSOR_SIZENS 调整大小的光标指向N-S。
wx.CURSOR_SIZENWSE 调整大小的光标指向NW-SE。
wx.CURSOR_SIZEWE 调整大小的光标指向W-E。
wx.CURSOR_SIZING 一般大小的游标。
wx.CURSOR_SPRAYCAN Spraycan游标。
wx.CURSOR_WAIT 等待光标。
wx.CURSOR_WATCH 监视光标。
wx.CURSOR_BLANK 透明光标。
wx.CURSOR_DEFAULT 标准X11光标(仅在wxGTK中)。
wx.CURSOR_copY_ARROW MacOS Theme Plus箭头(仅在Mac中)。
wx.CURSOR_ARROWWAIT 带有标准箭头的等待光标。
python wxPython 5 (框架 wx.Frame)
框架 wx.Frame 框架的形状和尺寸标记 wx.FRAME_NO_TASKBAR:一个完全标准的框架,除了一件事:在Windows系统和别的支持这个特性的系统下,它不显示在任务栏中。当最小化时,该框架图标化到桌面而非任务栏。 wx.FRAME_SHAPED:非矩形的框架。框架的确切形状使用SetShape()方法来设置。窗口的形状将在本章后面部分讨论。 wx.FRAME_TOOL_WINDOW:该框架的标题栏比标准的小些,通常用于包含多种工具按钮的辅助框架。在Windows操作系统下,工具窗口将不显示在任务栏中。 wx.ICONIZE:窗口初始时将被最小化显示。这个样式仅在Windows系统中起作用。 wx.MAXIMIZE:窗口初始时将被最大化显示(全屏)。这个样式仅在Windows系统中起作用。 wx.MINIMIZE:同wx.ICONIZE。
wx.FRAME_FLOAT_ON_PARENT:框架将漂浮在其父窗口(仅其父窗口)的上面。(很明显,要使用这个样式,框架需要有一个父窗口)。其它的框架可以遮盖这个框架。 wx.STAY_ON_TOP:该框架将始终在系统中其它框架的上面。(如果你有多个框架使用了这个样式,那么它们将相互重叠,但对于系统中其它的框架,它们仍在上面。)
wx.CAPTION:给窗口一个标题栏。如果你要放置最大化框、最小化框、系统菜单和上下文帮助,那么你必须包括该样式。 wx.FRAME_EX_CONTEXTHELP:这是用于Windows操作系统的,它在标题栏的右角放置问号帮助图标。这个样式是与wx.MAXIMIZE_BOX和WX.MINIMIZE_BOX样式互斥的。它是一个扩展的样式,并且必须使用两步来创建,稍后说明。 wx.FRAME_EX_METAL:在Mac OS X上,使用这个样式的框架有一个金属质感的外观。这是一个附加样式,必须使用SetExtraStyle方法来设置。 wx.MAXIMIZE_BOX:在标题栏的标准位置放置一个最大化框。 wx.MINIMIZE_BOX:在标题栏的标准位置放置一个最小化框。 wx.CLOSE_BOX:在标题栏的标准位置放置一个关闭框。 wx.RESIZE_BORDER:给框架一个标准的可以手动调整尺寸的边框。 wx.SIMPLE_BORDER:给框架一个最简单的边框,不能调整尺寸,没有其它装饰。该样式与所有其它装饰样式是互斥的。 wx.SYSTEM_MENU:在标题栏上放置一个系统菜单。这个系统菜单的内容与你所使用的装饰样式有关。例如,如果你使用wx.MINIMIZE_BOX,那么系统菜单项就有“最小化”选项。
GetBackgroundColor() GetId() GetMenuBar() GetPosition() GetSize() GetTitle()
Center(direction=wx.BOTH):框架居中(注意,非美语的拼写Centre,也被定义了的)。参数的默认值是wx.BoTH,在此情况下,框是在两个方向都居中的。参数的值若是wx.HORIZONTAL或wx.VERTICAL,表示在水平或垂直方向居中。 Enable(enable=true):如果参数为true,则框架能够接受用户的输入。如果参数为False,则用户不能在框架中输入。相对应的方法是Disable()。 GetBestSize():对于wx.Frame,它返回框架能容纳所有子窗口的最小尺寸。 Iconize(iconize):如果参数为true,最小化该框架为一个图标(当然,具体的行为与系统有关)。如果参数为False,图标化的框架恢复到正常状态。 IsEnabled():如果框架当前有效,则返回True。 IsFullScreen():如果框架是以全屏模式显示的,则返回True,否则False。细节参看ShowFullScreen。 IsIconized():如果框架当前最小化为图标了,则返回True,否则False。 IsMaximized():如果框架当前是最大化状态,则返回True,否则False。 IsShown():如果框架当前可见,则返回True。 IsTopLevel():对于顶级窗口部件如框架或对话框,总是返回True,对于其它类型的窗口部件返回False。 Maximize(maximize):如果参数为True,最大化框架以填充屏幕(具体的行为与系统有关)。这与敲击框架的最大化按钮所做的相同,这通常放大框架以填充桌面,但是任务栏和其它系统组件仍然可见。 Refresh(eraseBackground=True, SetDimensions(x, y, width, height, Show(show=True):如果参数值为True,导致框架被显示。如果参数值为False,导致框架被隐藏。Show(False)等同于Hide()。 ShowFullScreen(show,
wx.ALLOW_MINUS_ONE:一个有效的位置或尺寸。 wx.SIZE_AUTO:转换为一个wxPython默认值。 wx.SIZE_AUTO_HEIGHT:一个有效的高度,或一个wxPython默认高度。 wx.SIZE_AUTO_WIDTH:一个有效的宽度,或一个wxPython默认宽度。 wx.SIZE_USE_EXISTING:使用现有的尺寸。 |
Python 界面生成器 wxFormBuilder 的入门使用(wxPython的界面设计工具的初学笔记)
环境,Win10,python3.7.3,wxPython 4.0.4,wxFormBuilder 3.9
1、准备一个窗体。
点击wxformbuilder上方的标签“forms”,并点击标签下方的第一个类似窗体的图标“Frame”
然后,下面就会出现一个窗体。但是现在还不能直接往窗体上添加各种控件。咱们还需要给窗体添加布局器BoxSizer。
2、添加布局器
点击wxformbuilder上方的标签“Layout,并点击标签下方的第一个图标“wxBoxSizer”。添加一个只有以列控件布局的布局器。这时,窗体上并没有什么变化。但是窗口左边的目录树有变化了,窗体下多了一个布局器。
3、放置控件
保持目录树如上图一样,选中布局器bSizer1。这样,添加进窗体的控件都属于并使用这个布局器的方法,单列布局。就是,所有添加上去的控件都是在一列上。
点击wxformbuilder上方的标签“Common,顺次并点击标签下方的地三个图标“wxStaticText”,第四个图标“wxTextCtrl”,第一个图标“wxButton”,第四个图标“wxTextCtrl”。这样,窗体设置上就会多出一个文字标签、两个文本框和按钮。
4、修改控件属性
点击设计窗体上的控件,或者左边树形结构的控件名。在wxformbuilder右边的编辑栏都会自动变成对应控件的属性编辑。在此,你可以修改该控件的和窗体的各类属性。
此处,我们将会修改主窗体的name、title,文本编辑框的name,文字标签的label,和按键的label。以及控件的大小(通过 size 参数修改或工具栏上面的 Expand 工具修改)。
4.1 修改主窗体的name
主窗体的name和控件的name决定了你之后要使用的python代码时,使用的实体对象的变量名。点击树形结构的MyFrame1,并在右边属性编辑栏修改窗体的name值为“MyFormMain”。此时,左边树形中对应的主窗体也会跟着改变名字。如下图:
4.2修改控件的属性
依照同样的方法,在右边的编辑框修改对应控件的属性。
文本编辑框wxTextCtrl的name属性修改为“text_One”和“text_Two”,文字标签wxStaticText的label属性修改为“wxFormBuilder 初学笔记”,和按键wxButton的label属性修改为“求平方”,按键wxButton的name属性修改为“button_main”。
修改完只有应该如下图所示:
5、 添加控件的触发事情函数
当按钮被按下时,咱们应该触发一个函数,将文本框里的内容清空。所以,应该给按钮控件添加一个触发按下之后应该使用的处理函数。
点击选中按钮控件button_main,在右边的属性编辑框,点击上面的另外一个标签“Events”。添加一个给“OnButtonClick”的处理函数名:squareFunction。如下图:
6、测试窗体内容。
窗体设计基本完事了,咱们现在稍微测试一个窗体的样子。按下F5,弹出对话框后点击确定。这样就wxformbuilder简单将咱们设计的窗体编译C++的显示方法,显示出窗体的样子。如下图:
7、保存给python用的代码。
点击选中左边树形图的最上面的图标,即选中工程。再点击标签的python,即可出现在wxPython的代码了。如下图:
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version Oct 26 2018)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
###########################################################################
## Class MyFormMain
###########################################################################
class MyFormMain ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"wxFormBuilder 初学笔记", pos = wx.DefaultPosition, size = wx.Size( 500,181 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
bSizerMain = wx.BoxSizer( wx.VERTICAL )
self.staticText_Test = wx.StaticText( self, wx.ID_ANY, u"wxFormBuilder 初学笔记", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText_Test.Wrap( -1 )
bSizerMain.Add( self.staticText_Test, 0, wx.ALL|wx.EXPAND, 5 )
self.text_One = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizerMain.Add( self.text_One, 0, wx.ALL|wx.EXPAND, 5 )
self.button_main = wx.Button( self, wx.ID_ANY, u"求平方", wx.DefaultPosition, wx.DefaultSize, 0 )
bSizerMain.Add( self.button_main, 0, wx.ALL|wx.EXPAND, 5 )
self.text_Two = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizerMain.Add( self.text_Two, 0, wx.ALL|wx.EXPAND, 5 )
self.SetSizer( bSizerMain )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.button_main.Bind( wx.EVT_BUTTON, self.squareFunction )
def __del__( self ):
pass
# Virtual event handlers, overide them in your derived class
def squareFunction( self, event ):
event.Skip()
此时,全选上面的代码。右键,【Copy】。新建一个py源文件,并将全部代码粘贴进去,保存名为CalculatorFrame.py的python代码源文件。至此,wxPython代码就已经生成完毕了,请不要轻易变动文件里的代码。下面就是咱们调用窗体的主要逻辑代码了。
8、编辑逻辑代码
将逻辑代码保存为Calculator.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import wx
import CalculatorFrame
class CalcFrame(CalculatorFrame.MyFormMain):
def __init__(self,parent):
CalculatorFrame.MyFormMain.__init__(self,parent)
def squareFunction(self,event):
num = int(self.text_One.GetValue())
self.text_Two.SetValue(str(num*num))
app = wx.App(False)
frame = CalcFrame(None)
frame.Show(True)
#start the applications
app.MainLoop()
将上面的逻辑代码保存为Calculator.py,并跟刚刚生成那个CalculatorFrame.py,放在同一个目录里。直接在代码编辑器里面右键运行。效果如下:
在第一个文本框中输入数字,再点击“求平方”按钮,看看下面是不是显示出你要的结果呢?
至此,第一个窗口设计程序的过程写完了。
参考文献:
1、wxPython界面设计器—wxformbuilde的简单教程 https://blog.51cto.com/yuyongid/1717514
2、wxFormBuilder摸索--小白上手--做一个编辑器 https://blog.csdn.net/caiza3491/article/details/79529966
3、wxPython的界面设计wxformbuilde初学笔记 https://blog.csdn.net/baoyan2015/article/details/54613930
4、Python界面生成器wxFormBuilder简单使用入门教程 https://blog.csdn.net/Thanours/article/details/83789047
5、Python界面生成器wxFormBuilder使用示例 https://www.jianshu.com/p/84ec9e5c1cb1
Python中的GUI库wxPython详解
python是一种简洁、易学、高效的编程语言。它广泛应用于各种领域,如数据科学、人工智能、游戏开发、网络编程等。虽然python自带有一些gui库,但他们的功能较为简单,无法满足各类复杂应用的需求。因此,python中有许多gui库可供选择,其中wxpython是其中一个,本文将详细介绍。
wxPython简介
wxPython是一个开源、跨平台的GUI库,它基于C++的wxWidgets库,封装了wxWidgets的完整功能,提供给Python开发者使用。wxPython提供了一个易于使用的面向对象的API,以及一个来自wxWidgets最新版本的完整实现。使用wxPython,开发者可以使用一个Python脚本创建跨平台、本地化、原生的用户界面。
wxPython特点
1.跨平台性
立即学习“Python免费学习笔记(深入)”;
wxPython可在各种平台上运行,如Windows、Linux和MacOS。
2.易于使用
wxPython采用一种简单的面向对象设计,每个控件都可以理解为一个独立的对象,易于定制和控制。
3.扩展性
wxPython支持用C++扩展其功能,因此可以调用各种库实现更高级的功能。
4.兼容性
wxPython兼容Python中主要的GUI库,如Tkinter和PyQt等,也可以很好地与其他Python库共同工作。
wxPython组件与布局
wxPython提供了许多组件,可以用于创建丰富的GUI应用。这些组件可以分为窗口和控件两类。
窗口包括Frame、Dialog、Panel、Notebook、Splitter窗口等。他们都有特定的用途,可以根据需要组合和使用。
控件包括Button、TextCtrl、ListBox、CheckBox、RadioButton、ComboBox等。这些控件都有各自的功能,可以根据需求选择合适的控件。
布局是一个管理组件位置及大小的过程。在wxPython中,布局通过Sizer来实现,它主要有BoxSizer、GridSizer、FlexGridSizer、WrapSizer这几种。
其中BoxSizer是最常用的布局,它将控件按水平或垂直方向排列。GridSizer则将控件放在一个网格中,可以方便地控制它们的位置和大小。
wxPython事件处理
在wxPython中,事件是由用户操作或系统触发的一系列信号。GUI程序通常会监听并响应这些事件,例如当用户单击按钮时,程序需要响应并执行按钮的动作。
wxPython的事件处理模型是基于发布/订阅模式的,意味着当某个事件发生时,它将被传送给可用的处理函数。带有特定事件处理器的控件可以监听、捕获和处理与该事件相关的信号。事件处理机制提供了一种可扩展性高的方法,使得开发人员可以应用GUI编程的许多常见模式,例如命令模式、状态机等。
wxPython的事件处理方法有两种:基于类的方法和基于函数的方法。基于类的方法是通过继承wx.EvtHandler并覆盖该类的方法来实现,而基于函数的方法是通过将处理函数注册到事件处理机制中来实现。
例:
import wx class MyFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(200, 100)) self.panel = wx.Panel(self) self.btn_hello = wx.Button(self.panel, label=''Hello'', pos=(40, 20)) self.Bind(wx.EVT_BUTTON, self.on_hello, self.btn_hello) def on_hello(self, event): wx.MessageBox(''Hello World!'', ''Message'', wx.OK | wx.ICON_INFORMATION) app = wx.App() frame = MyFrame(None, ''Hello World'') frame.Show(True) app.MainLoop()
在这个例子中,我们创建了一个按钮,为其绑定了一个单击事件的处理函数。每次单击按钮时,将弹出一个对话框,显示“Hello World!”。
结语
wxPython是一种功能强大、易于使用的GUI库。使用wxPython,开发者可以轻松快速地创建跨平台、本地化、原生的用户界面。同时,wxPython还提供了丰富的组件和布局来帮助开发者创建复杂的GUI应用。如果您对Python编程感兴趣,或者需要使用Python编写GUI应用程序的话,wxPython是一个不错的选择。
以上就是Python中的GUI库wxPython详解的详细内容,更多请关注php中文网其它相关文章!
我们今天的关于wxpython —线程和窗口事件和wxpython多线程的分享就到这里,谢谢您的阅读,如果想了解更多关于pip安装工具-python (ui:wxpython)、python wxPython 5 (框架 wx.Frame)、Python 界面生成器 wxFormBuilder 的入门使用(wxPython的界面设计工具的初学笔记)、Python中的GUI库wxPython详解的相关信息,可以在本站进行搜索。
本文标签: