如何知道用户是否更改了 wxPyhton 中 AuiNotebook 的选项卡顺序?
How to know if the user change the order of tabs of a AuiNotebook in wxPyhton?
我在 wxPyhton 中使用 AuiNotebook 来处理不同选项卡上的信息。用户可以在选项卡中填写信息,通过拖放更改它们的顺序,然后生成一个总结选项卡中信息的句子。问题是当用户更改选项卡的顺序时必须重新生成这句话,因为选项卡中的信息是顺序相关的(顺序更改时含义也会更改)。
所以,我必须知道用户何时更改选项卡的顺序以重新生成句子。
我已经尝试捕获 EVT_AUINOTEBOOK_END_DRAG 和 EVT_AUINOTEBOOK_DRAG_DONE 事件,但它们仅在以下情况下被调用用户拆分选项卡。它们对我来说没有用。
这是我尝试执行此操作的代码:
from wx.aui import AuiNotebook, EVT_AUINOTEBOOK_PAGE_CLOSED
from wx.lib.dialogs import ScrolledMessageDialog
from event import event_handler
import wx
import shlex, subprocess
class CommandNoteBook(Panel):
def __init__(self, parent, cmd, template_file, interface_file):
super(Panel, self).__init__(parent)
self.command = cmd
self.notebook = AuiNotebook(self)
#Refresh when info inside tab changes
self.Bind(event_handler.EVT_VALUE_CHANGED, self.OnRefresh, id=wx.ID_ANY)
#Refresh when a tab is closed
self.Bind(EVT_AUINOTEBOOK_PAGE_CLOSED, self.OnRefresh, self.notebook)
#Refresh when tabs order change
self.Bind(EVT_AUINOTEBOOK_END_DRAG, self.OnRefresh, self.notebook)
您可以 bind
到 wx.aui.EVT_AUINOTEBOOK_END_DRAG
事件并在那里设置一个变量。
import wx
import wx.aui
class Frame1 (wx.Frame):
def __init__(self,parent):
wx.Frame.__init__ (self,parent,id=wx.ID_ANY,title="Aui Notebook",size=(500,300))
self.tabs_altered = False
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.m_auinotebook1 = wx.aui.AuiNotebook( self, wx.ID_ANY)
self.m_panel2 = wx.Panel( self.m_auinotebook1, wx.ID_ANY, style=wx.TAB_TRAVERSAL )
self.p2_text = wx.StaticText(self.m_panel2, -1, "1 has not been moved", pos=(10,10))
self.m_auinotebook1.AddPage( self.m_panel2, u"page1", True, wx.NullBitmap )
self.m_panel3 = wx.Panel( self.m_auinotebook1, wx.ID_ANY, style=wx.TAB_TRAVERSAL )
self.p3_text = wx.StaticText(self.m_panel3, -1, "2 has not been moved", pos=(10,10))
self.m_auinotebook1.AddPage( self.m_panel3, u"page2", False, wx.NullBitmap )
self.m_panel4 = wx.Panel( self.m_auinotebook1, wx.ID_ANY, style=wx.TAB_TRAVERSAL )
self.p4_text = wx.StaticText(self.m_panel4, -1, "3 has not been moved", pos=(10,10))
self.m_auinotebook1.AddPage( self.m_panel4, u"page3", False, wx.NullBitmap )
bSizer1.Add( self.m_auinotebook1, 1, wx.EXPAND |wx.ALL, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Event
self.m_auinotebook1.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG, self.OnAuiDragend)
def OnAuiDragend(self,event):
page_idx = event.GetSelection()
text = self.m_auinotebook1.GetPageText(page_idx)
if text == "page1":
self.p2_text.SetLabel("1 Moved")
if text == "page2":
self.p3_text.SetLabel("2 Moved")
if text == "page3":
self.p4_text.SetLabel("3 Moved")
self.tabs_altered = True
if __name__ == "__main__":
app = wx.App()
frame = Frame1(None)
frame.Show()
app.MainLoop()
我在 wxPyhton 中使用 AuiNotebook 来处理不同选项卡上的信息。用户可以在选项卡中填写信息,通过拖放更改它们的顺序,然后生成一个总结选项卡中信息的句子。问题是当用户更改选项卡的顺序时必须重新生成这句话,因为选项卡中的信息是顺序相关的(顺序更改时含义也会更改)。
所以,我必须知道用户何时更改选项卡的顺序以重新生成句子。
我已经尝试捕获 EVT_AUINOTEBOOK_END_DRAG 和 EVT_AUINOTEBOOK_DRAG_DONE 事件,但它们仅在以下情况下被调用用户拆分选项卡。它们对我来说没有用。
这是我尝试执行此操作的代码:
from wx.aui import AuiNotebook, EVT_AUINOTEBOOK_PAGE_CLOSED
from wx.lib.dialogs import ScrolledMessageDialog
from event import event_handler
import wx
import shlex, subprocess
class CommandNoteBook(Panel):
def __init__(self, parent, cmd, template_file, interface_file):
super(Panel, self).__init__(parent)
self.command = cmd
self.notebook = AuiNotebook(self)
#Refresh when info inside tab changes
self.Bind(event_handler.EVT_VALUE_CHANGED, self.OnRefresh, id=wx.ID_ANY)
#Refresh when a tab is closed
self.Bind(EVT_AUINOTEBOOK_PAGE_CLOSED, self.OnRefresh, self.notebook)
#Refresh when tabs order change
self.Bind(EVT_AUINOTEBOOK_END_DRAG, self.OnRefresh, self.notebook)
您可以 bind
到 wx.aui.EVT_AUINOTEBOOK_END_DRAG
事件并在那里设置一个变量。
import wx
import wx.aui
class Frame1 (wx.Frame):
def __init__(self,parent):
wx.Frame.__init__ (self,parent,id=wx.ID_ANY,title="Aui Notebook",size=(500,300))
self.tabs_altered = False
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.m_auinotebook1 = wx.aui.AuiNotebook( self, wx.ID_ANY)
self.m_panel2 = wx.Panel( self.m_auinotebook1, wx.ID_ANY, style=wx.TAB_TRAVERSAL )
self.p2_text = wx.StaticText(self.m_panel2, -1, "1 has not been moved", pos=(10,10))
self.m_auinotebook1.AddPage( self.m_panel2, u"page1", True, wx.NullBitmap )
self.m_panel3 = wx.Panel( self.m_auinotebook1, wx.ID_ANY, style=wx.TAB_TRAVERSAL )
self.p3_text = wx.StaticText(self.m_panel3, -1, "2 has not been moved", pos=(10,10))
self.m_auinotebook1.AddPage( self.m_panel3, u"page2", False, wx.NullBitmap )
self.m_panel4 = wx.Panel( self.m_auinotebook1, wx.ID_ANY, style=wx.TAB_TRAVERSAL )
self.p4_text = wx.StaticText(self.m_panel4, -1, "3 has not been moved", pos=(10,10))
self.m_auinotebook1.AddPage( self.m_panel4, u"page3", False, wx.NullBitmap )
bSizer1.Add( self.m_auinotebook1, 1, wx.EXPAND |wx.ALL, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Event
self.m_auinotebook1.Bind(wx.aui.EVT_AUINOTEBOOK_END_DRAG, self.OnAuiDragend)
def OnAuiDragend(self,event):
page_idx = event.GetSelection()
text = self.m_auinotebook1.GetPageText(page_idx)
if text == "page1":
self.p2_text.SetLabel("1 Moved")
if text == "page2":
self.p3_text.SetLabel("2 Moved")
if text == "page3":
self.p4_text.SetLabel("3 Moved")
self.tabs_altered = True
if __name__ == "__main__":
app = wx.App()
frame = Frame1(None)
frame.Show()
app.MainLoop()