免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8235 | 回复: 2
打印 上一主题 下一主题

请问在wxPython中如何禁止默认窗口的关闭事件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-27 11:29 |只看该作者 |倒序浏览
窗口关闭事件

现在有一个主窗口,然后加了一个TaskBarIcon
第一:我想把主窗口中的关闭事件改成隐藏主窗口,不知道怎么实现,在网上搜了一圈找到了wx.CloseEvent这个好像和close事件有关的。。但是不知道如何操作。。


第二:程序创建了一个Frame和一个TaskBarIcon,但是在关闭的时候有点问题。从Frame的关闭只能销毁Frame本身,而在TaskBarIcon中定义的菜单退出可以销毁所有资源


代码:
  1. # -*- coding: cp936 -*-

  2. import wx,sys
  3. from threading import Thread
  4. from helper import helpApp
  5. from UserData import UserInfo
  6. from udprotocol import MSGER


  7. # sys config
  8. Default = helpApp()

  9. class mainWindow():

  10.     def __init__(self, parent):

  11.         # ---- init param -----

  12.         User = UserInfo("192.168.1.47", "00-23-54-CA-83-F3")
  13.         User = User.getUserInfo()
  14.         self.USER_INFO = User[2] + "\nIP: " + User[0]
  15.         self.USER_IMAGE = User[3]




  16.         # ---- end -----

  17.         MainPanel = wx.Panel(parent, -1)

  18.         # activeX
  19.         self.HOSTIMAGE = wx.StaticBitmap(MainPanel, -1, bitmap=self.ConvertUserImage())

  20.         self.HOSTInfo = wx.StaticText(MainPanel, -1, self.USER_INFO)

  21.         self.USERList = wx.TreeCtrl(MainPanel, -1)

  22.         # user tree
  23.         root = self.USERList.AddRoot("默认分组")

  24.         # ---- layout -----

  25.         HBox = wx.BoxSizer(wx.VERTICAL)

  26.         # host sizer
  27.         HOSTBox = wx.BoxSizer(wx.HORIZONTAL)
  28.         HOSTBox.Add(self.HOSTIMAGE, 0)
  29.         HOSTBox.Add(self.HOSTInfo, 0, wx.LEFT, 5)

  30.         # list sizer
  31.         ListBox = wx.BoxSizer(wx.HORIZONTAL)
  32.         ListBox.Add(self.USERList, 1, wx.EXPAND)

  33.         # order by row
  34.         HBox.Add(HOSTBox, 0, wx.LEFT | wx.TOP, 5)
  35.         HBox.Add((-1, 5))
  36.         HBox.Add(ListBox, 1, wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, 5)

  37.         MainPanel.SetSizer(HBox)

  38.         # ---- end layout -----


  39.     def ConvertUserImage (self):
  40.         """resize image"""

  41.         TempIMAGE = wx.Image(self.USER_IMAGE, wx.BITMAP_TYPE_ANY)
  42.         TempIMAGE_Width = TempIMAGE.GetWidth()
  43.         TempIMAGE_Height = TempIMAGE.GetHeight()

  44.         TempIMAGE_NewSize = Default.ThumbSize(TempIMAGE_Width, TempIMAGE_Height)
  45.         TempIMAGE_Thumb = TempIMAGE.Scale(TempIMAGE_NewSize[0], TempIMAGE_NewSize[1])
  46.         TempBMP = TempIMAGE_Thumb.ConvertToBitmap()

  47.         return TempBMP

  48.     def AddTreeNodes(self, parentItem, items):
  49.         for item in items:
  50.             if type(item) == str:
  51.                 newItem = self.tree.AppendItem(parentItem, item)
  52.             else:
  53.                 newItem = self.tree.AppendItem(parentItem, item[0])
  54.                 self.AddTreeNodes(newItem, item[1])


  55. class TaskBarICO(wx.TaskBarIcon):
  56.     TBMENU_SET = wx.NewId()
  57.     TBMENU_CLOSE = wx.NewId()

  58.     def __init__(self, parent):
  59.         wx.TaskBarIcon.__init__(self)
  60.         self.frame = parent
  61.         self.SetIcon(wx.Icon(name = 'Msger.ico', type = wx.BITMAP_TYPE_ICO), Default.SYS_NAME + " " + Default.SYS_VERSION)

  62.         self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarLeftDClick)
  63.         self.Bind(wx.EVT_MENU, self.OnSysSet, id = self.TBMENU_SET)
  64.         self.Bind(wx.EVT_MENU, self.OnExit, id = self.TBMENU_CLOSE)

  65.     def CreatePopupMenu(self):
  66.         """
  67.         This method is called by the base class when it needs to popup
  68.         the menu for the default EVT_RIGHT_DOWN event.
  69.         """
  70.         menu = wx.Menu()
  71.         menu.Append(self.TBMENU_SET, "系统设置")
  72.         menu.AppendSeparator()
  73.         menu.Append(self.TBMENU_CLOSE, "退出")
  74.         return menu

  75.     def OnTaskBarLeftDClick(self, event):
  76.         if self.frame.IsIconized():
  77.            self.frame.Iconize(False)
  78.         if not self.frame.IsShown():
  79.            self.frame.Show(True)
  80.         self.frame.Raise()

  81.     def OnSysSet (self, event):
  82.         pass

  83.     def OnExit (self, event):
  84.         sys.exit()


  85. class mainApp(wx.App):
  86.     def __init__(self):
  87.         wx.App.__init__(self, 0)
  88.         return None

  89.     def OnInit(self):
  90.         """create main window"""

  91.         self.frame = wx.Frame(parent = None, title = Default.SYS_NAME + " " + Default.SYS_VERSION, size = (Default.MainWindow_Default_Width,Default.MainWindow_Default_Height))

  92.         self.MainWin = mainWindow(self.frame)
  93.         self.TaskBar = TaskBarICO(self.frame)

  94.         self.frame.SetIcon(wx.Icon('Msger.ico', wx.BITMAP_TYPE_ICO))
  95.         self.frame.SetMinSize((Default.MainWindow_Min_Width,Default.MainWindow_Min_Height))
  96.         self.frame.Center()
  97.         self.frame.Show()

  98.         #self.Bind(wx.EVT_CLOSE, self.OnClose, self.frame)

  99.         return True

  100.     def OnHide(self, event):
  101.         self.frame.Hide()

  102. #    def OnClose (self, event):
  103. #        print "Close soon..."
  104. #        #wx.MessageBox('Hello From TaskBarIcon!', 'Prompt')
  105. #        self.frame.Show(False)
  106. #        return False
  107. #        #self.TaskBar.Close()
  108. #        #self.frame.Close()
  109. #        #sys.exit()
  110. #        #wx.CloseEvent.Veto()
  111. #
  112. #        #wx.CallAfter(TaskBarICO.OnExit)
  113. #        #self.ExitMainLoop()

  114.     def OnExit (self):
  115.         self.frame.Iconize(True)
  116.         self.SetExitOnFrameDelete(False)
  117.         print "Close soon..."
  118.         return False




  119. if __name__ == '__main__':

  120.     App = mainApp()
  121.     App.MainLoop()

  122.     wx.CallAfter(MSGER())
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-05-27 14:25 |只看该作者
self.Bind(wx.EVT_CLOSE, self.CLOSE)


返回Flase

论坛徽章:
0
3 [报告]
发表于 2010-05-27 15:51 |只看该作者
回复 2# windwiny


    嗯。。我开始也这样做过测试,不知道怎么老没成功,后来写了个最简单的窗体测试,通过了!!郁闷。。。。搞得我一直以为这种方法不可行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP