我的应用中有多个面板,位于wx.Notebook
中。为了说明起见,我们假设我在名为launchTab
的文件中有一个名为LaunchPanel
的面板,在名为scanTab
的文件中有一个名为ScanPanel
的面板。wxPython:从不同面板中禁用面板
我在ScanPanel
上有一个按钮,可以锁定GUI一段时间,所以当前长时间运行任务启动时,我正在禁用面板上的每个小部件。这一切工作正常。但是现在我想禁用其他面板中的其他事物,如果用户使用鼠标左键触发快乐,可能会发生冲突。我发现你可以用panel.Disable()
禁用一个面板,但是我不知道如何从ScanPanel
中调用Disable
作为LaunchPanel中的面板。
我试过import launchTab
从launchTab
内以访问ScanPanel
:
import launchTab
...
launchTab.LaunchPanel.Disable()
,但得到这个错误: TypeError: unbound method Disable() must be called with LaunchPanel instance as first argument (got nothing instead)
我想答案是发布订阅,但我不知道如何设置一个与面板混杂,我只用它们来更新小部件......?目前有大量的源代码,所以我不想粘贴所有的代码,但如果需要,我可以提供更多的说明。
帮助?思考?
编辑按照以下解答:
所以 - 我不太确定我明白......有下列组件的应用程序。 myAppGUI.py:
class myNotebook(wx.Notebook):
"""
The core layout for the app -- notebook pages are slotted here
"""
#----------------------------------------------------------------------
def __init__(self, parent):
wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT)
self.AddPage(launchTab.LaunchPanel(self), "Launch")
self.AddPage(scanTab.ScanPanel(self), "Scan")
self.AddPage(extractTab.ExtractPanel(self), "Extract")
self.AddPage(virtualsTab.VirtualsPanel(self), "Virtuals")
这是启动我所有其他笔记本标签的主要文件。然后,我有,launchTab:
class LaunchPanel(wx.Panel):
"""
Launch Tab for finding and launching databases
"""
#----------------------------------------------------------------------
def __init__(self, parent):
""""""
wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
super(LaunchPanel, self)
self.initialize()
def initialize(self):
global sizer
panel = self
sizer = wx.GridBagSizer(11, 3)
<snip>
然后我有,scanTab:
class ScanPanel(wx.Panel):
"""
Scan Tab for running Sonospy Database Scans, Updates and Repairs
"""
#----------------------------------------------------------------------
def __init__(self, parent):
""""""
wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
panel = self
sizer = wx.GridBagSizer(6, 5)
self.launchPanelRef = None
我试过下面的答案,但我觉得,因为我的init使用父父=(我脱下示例代码别的地方把它原来的工作),我收到以下错误:
File "gui/scanTab.py", line 223, in __init__
launchPanel = launchTab.LaunchPanel()
TypeError: __init__() takes exactly 2 arguments (1 given)
当你说放:
def main():
scanPanel = ScanPanel()
launchPanel = LaunchPanel()
scanPanel.setInstanceLaunchPanel(launchPanel)
这是scanTab内吗?并且是launchPanelRef
我想在这种情况下控制的面板的名称?
对不起 - 我很容易混淆。 :)
-Chow
根据您的添加内容查看补充内容。您将受益于一些面向对象的教程。 – Mark
Heh。我会从很多事情中受益。我是那些通过这种方式学习的人中的一员 - 我有很多关于这个主题的书籍,而我的Python体验现在大约有4周的时间。 :) – chow