Python使用wxPython做界面,如何在关闭窗口前让用户确认一下?

woshihuzi 2018-05-26 08:18:26

'''
想象中的功能:程序运行后,用户点击叉号或者点击关闭按钮,都能激活函数OnClose()
在OnClose()中询问用户是否真的关闭界面,
用户点击“确定”则关闭界面,
用户点击“取消”则不关闭界面
现在的问题:点击关闭按钮无反应,点击叉号报错。
需求:能否在不建立Class的情况下实现预想的功能,代码该如何修改呢?
'''

import wx

#关闭主窗口前确认一下是否真的关闭
def OnClose(self, event):
r = wx.MessageBox("关闭窗口?", "确认", wx.CANCEL|wx.OK|wx.ICON_QUESTION)
if r == wx.ID_OK:
self.Destroy()

app = wx.App(False)
frame = wx.Frame(parent=None, size=(300, 200))
panel = wx.Panel(frame)
button = wx.Button(panel, label = "关闭")
button.Bind(wx.EVT_BUTTON, OnClose, frame) #按钮绑定主窗口关闭事件
frame.Bind(wx.EVT_CLOSE, OnClose) #主窗口绑定自身的关闭事件
frame.Show(True)
app.MainLoop()
...全文
2074 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshihuzi 2018-05-27
  • 打赏
  • 举报
回复
解决了,记录一下思路: 原来想在绑定消息时把要关闭的窗口的ID传到响应函数中,不过wx的消息机制我不太懂,试了很多次总是出错。然后就想了个变通的法子,用全局变量。 要关闭的就是frame,那就好办了,在响应函数中声明这个全局变量,然后不用从参数中获取要关闭谁了,问题就简单了。 ''' 程序功能:不建立类,用简单代码实现如下功能: 点击叉号或者点击关闭按钮,都能激活函数OnClose() 在OnClose()中询问用户是否真的关闭界面, 用户点击“确定”则关闭界面, 用户点击“取消”则不关闭界面 ''' import wx #关闭主窗口前确认一下是否真的关闭 def OnClose(event): global frame r = wx.MessageBox("是否真的要关闭窗口?", "请确认", wx.CANCEL|wx.OK|wx.ICON_QUESTION) if r == wx.OK: #注意wx.OK跟wx.MessageDialog返回值wx.ID_OK不一样 frame.Destroy() else: app = wx.App(False) frame = wx.Frame(parent=None, size=(300, 200)) panel = wx.Panel(frame) button = wx.Button(panel, label = "关闭") button.Bind(wx.EVT_BUTTON, OnClose) #按钮绑定主窗口关闭事件 frame.Bind(wx.EVT_CLOSE, OnClose) #主窗口绑定自身的关闭事件 frame.Show(True) app.MainLoop()

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧