我的應用中有多個面板,位於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