Как узнать, меняет ли пользователь порядок вкладок AuiNotebook в wxPyhton? - PullRequest
0 голосов
/ 28 сентября 2019

Я использую AuiNotebook в wxPyhton для обработки информации на разных вкладках.Пользователь может заполнять информацию во вкладках, изменять их порядок с помощью перетаскивания, а затем генерировать предложение, которое суммирует информацию во вкладках.Проблема заключается в том, что это предложение необходимо переформулировать, когда пользователь меняет порядок вкладок, поскольку информация на вкладках зависит от порядка (значение изменяется при изменении порядка).

Итак, я должен знать, когдапользователь меняет порядок вкладок, чтобы восстановить предложение.

Я уже пытаюсь перехватить события 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)

1 Ответ

0 голосов
/ 29 сентября 2019

Вы можете 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()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...