问个问题:app = exApp(0),给这个 0 有什么用啊

问个问题:app = exApp(0),给这个 0 有什么用啊



[Copy to clipboard] [ - ]
CODE:
from wxPython.wx import *
from wxPython.html import *
import os,sys

class exHtmlWindow(wxHtmlWindow):
   def __init__(self, parent, id, frame):
      wxHtmlWindow.__init__(self,parent,id)

class exHtmlPanel(wxPanel):
   def __init__(self, parent, id, frame):
      wxPanel.__init__(self,parent,-1)

      self.html = exHtmlWindow(self, -1, frame)

      self.box = wxBoxSizer(wxVERTICAL)
      self.box.Add(self.html, 1, wxGROW)

      self.SetSizer(self.box)
      self.SetAutoLayout(true)

class exFrame (wxFrame):
   def __init__(self, parent, ID, title):
      wxFrame.__init__(self,parent,ID,title,wxDefaultPosition,wxSize(600,750))
      panel = exHtmlPanel(self, -1, self)

class exApp(wxApp):
   def OnInit(self):
      frame = exFrame(NULL, -1, "Example Browser")
      frame.Show(true)
      self.SetTopWindow(frame)
      return true


app = exApp(0)
app.MainLoop()

试了一下,将 app = exApp(0) 中的 0 替换成 None, False,或者其他任意字符,甚至清空,程序都可以运行。

那么,这个 0 有什么用呢?
首先声明一下,我不懂wxwidgets,所以我下面说的不一定正确。

从程序可以看出这个0最终是要传给wxFrame类的,我google了一下,查到这个http://docs.wxwidgets.org/2.6/wx_wxframe.html,从这个类的构造函数的参数说明: The window parent. This may be NULL. If it is non-NULL, the frame will always be displayed on top of the parent window on Windows.

所以我的理解是:这个参数是用来设置父窗口句柄的,如果设置了,它就会显示在父窗口的前面把父窗口给挡住(哪怕当前激活的窗口是父窗口,也会被他挡住),如果设为0(包括你说的None, False,任意字符或者清空他,可能都被python的wrapper弄成0了)就是普通窗口了
嗯,感谢 luxeeaaa 兄的回答。

但是我还是不大理解。

有没有达人进一步解释?
看文档。看api的说明。
wx.App.__init__(self, redirect=False, filename=None, useBestVisual=False, clearSigInt=True)
(Constructor)

呵呵,这个 0 原来是 redirect,惭愧