Skip to main content
 首页 » 编程设计

python之wxPython 的 "Inception"情况

2025年05月04日7zhenyulu

标题很有趣,我知道。就像电影《盗梦空间》中的情景。梦中梦中梦。 大家好,我正在使用 wxpython 制作一个应用程序。 我想实现这样的目标。(这只是问题的想法)

func1(self,event): 
      some widgets added 
      func2 
func2(self,event): 
      remove previous widgets (by using event.GetEventObject().GetParent().Hide()) 
      add new ones 
      func3 
func3(self,event): 
      remove widgets added in func2 
      recall widgets added in func1 (event.GetEventObject().GetParent().Show()) 

我在里面遍历了太多,比如从函数跳到其他嵌套3次 我无法跟踪事件的功能。

如果我用

存储事件的 ID(在列表中)
   event.GetId()  

在遍历每个函数时,有没有一种方法可以使用这些 ID 替换

event.GetEventObject().GetParent().Show() 
event.GetEventObject().GetParent().Hide() 

与

id1.GetEventObject().GetParent().Hide() 
id2.GetEventObject().GetParent().Show() 

我只想知道这种事情有可能吗? 或者有更好更简单的方法吗?

请您参考如下方法:

如果还有人遇到这样的麻烦,我找到了一些方法...... 首先,你不需要为此使用 ID.....更简单的方法是 创建不同的面板......... 当你想隐藏一个时,你可以简单地做

panelname.Hide()   

当你想显示另一个时,

panelname.Show() # Or this also works (event.GetEventObject().GetParent().Show()\Hide()) 

注意:1) 请记住为所有小部件(按钮等)提供单独的 ID(或 -1 即可)。 2) 您也可以通过函数调用创建重叠面板。(示例 - 单击按钮后)。 3)您还可以创建一个公共(public)面板(父面板),然后在 init 主体中创建子面板。然后您可以简单地在绑定(bind)的函数中隐藏和显示这些面板(可能带有按钮等)。

我这样解决了我的问题。不需要使用 GetId() 。但可能还有其他方法。如果您有其他想法,请分享。我希望有一天这对某人有所帮助...谢谢大家。