self代表这个类,所以要注意self的用法
先总结一下遇到的错误:
python positional argument follows keyword argument
位置参数在关键字参数之后
部分语句的关键字参数必须跟随在位置参数后面
因为python函数在解析参数时, 是按照顺序来的,位置参数不满足就没办法考虑其他的参数。
一个简单的python GUi程序运行时,报出错误 : PyNoAppError: The wx.App object must be created first!
要么把程序在python的cmd窗口运行,不然spyder会报错。
要么在spyder里的console输入del app,回车,再运行程序即可。
这个wxPython在导入时不用写这么多,import wx即可
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,title='welcome',pos=(500,500),size=(200,200))
#增加面板
self.panel=wx.Panel(self)
#增加静态文本控件
self.user=wx.StaticText(parent=self.panel,label='user',pos=(10,5),size=(80,20))
self.password=wx.StaticText(parent=self.panel,label='password',pos=(10,30),size=(80,20))
#添加文本框
self.inputN=wx.TextCtrl(parent=self.panel,pos=(80,5),size=(80,20))
self.inputM=wx.TextCtrl(parent=self.panel,pos=(80,30),size=(80,20))
#添加按钮
self.buttonLogin=wx.Button(parent=self.panel,label='login',pos=(30,70),size=(50,20))
#为按钮绑定事件处理方法
self.Bind(wx.EVT_BUTTON,self.login,self.buttonLogin)
#添加按钮
self.buttonCancel=wx.Button(pos=(90,70),size=(50,20),parent=self.panel,label='cancel')
#为按钮绑定事件处理方法
self.Bind(wx.EVT_BUTTON,self.cancel,self.buttonCancel)
#第一个参数为事件类型,第二个参数为响应函数名,第三个参数为事件来源组件名(见上方按钮)
def login(self,event):
name=self.inputN.GetValue()
pwd=self.inputM.GetValue()
if name=='admin' and pwd=='123456':
dlg=wx.MessageDialog(self,'注册成功','Caution',wx.OK)
dlg.ShowModal()
else:
dlg=wx.MessageDialog(self,'注册失败','Caution',wx.OK)
dlg.ShowModal()
def cancel(self,event):
self.inputM.SetValue('')
self.inputN.SetValue('')
if __name__=='__main__':
app=wx.App()
frm=MyFrame()
frm.Show()
app.MainLoop()