刚才import wx语句一直报错,在IDLE中可以正常运行,但是.py中就不行,查了好多种解决方案,还将wx添加到了环境变量中,都没有解决。最终发现是将文件命名成了wx.py,与python中自己的库冲突,以至于报错。如果大家有出现这种错误的话,修改文件名即可解决。好了话不多说,开启今天的学习笔记。
wxPython的安装
通过命令提示符安装即可,输入:
pip install wxPython
构建一个wxPython程序,至少需要一个应用wx.App()对象和一个窗口wx.Frame()对象。
安装成功后测试一下,输入以下代码:
import wx
#创建程序对象
app = wx.App()
#创建窗口,设置窗口标题,位置以及大小
frm = wx.Frame(None, title="Hello World",size=(400,300),pos=(100,100))
#显示窗口
frm.Show()
#进入主事件循环
app.MainLoop()
在窗口中添加控件
Panel面板控件,静态文本控件StaticText
示例代码:
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None,title="Hello World",size=(400,300),pos=(100,100))
panel=wx.Panel(parent=self)
statictext=wx.StaticText(parent=panel,label='Hello World!',pos=(10,10))
app = wx.App()
frm=MyFrame()
frm.Show()
app.MainLoop()
控件可以直接放在窗口中,为了方便布局,一般建议先将所有控件放到面板中,再将面板放到窗口中。
事件处理
图形界面的控件要响应用户的操作,必须添加事件处理机制。
1.事件源:时间发生的场所,就是各个控件。
2事件: wxPython中的事件被封装为事件类wx.Event及其子类, 例如按钮事件类是wx.CommandEvent, 鼠标事件类是wx.MoveEvent。
3 事件处理程序: 一个响应用户事件的方法。
下面通过一个示例介绍事件处理流程。 在以下窗口中有一个按钮和一个静态文本, 在单击OK按钮时会改变静态文本显示的内容。
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None,title="事件处理",size=(400,300))
panel=wx.Panel(parent=self)
self.statictext=wx.StaticText(parent=panel,label='请单击OK!',pos=(110,20))
b=wx. Button(parent=panel,label='OK',pos=(100,50))
self.Bind(wx.EVT_BUTTON,self.on_click,b)
def on_click(self,event):
self.statictext.SetLabelText('Hello World!')
app = wx.App()
frm=MyFrame()
frm.Show()
app.MainLoop()
b是创建按钮对象,self.Bind(wx.EVT_BUTTON,self.on_click,b)绑定事件, wx.EVT_BUTTON是事件类型,即按钮单机事件,self.on_click是事件处理程序,b是事件源,即按钮对象。