2016-11-27 2 views
0

У меня есть класс Notebook с некоторыми вкладками/страницами (наследующий от wx.Panel).Как сфокусировать страницу wx.Notebook при прямом нажатии на нее

В настоящее время я определяю правосторонний щелчок в пределах класса Notebook, и все работает отлично. Единственная проблема заключается в том, что я хочу настроить фокус на определенной вкладке, когда я нажму на нее правой кнопкой мыши.

Как я могу это сделать? Единственный способ, которым я мог это сделать, - это щелкнуть левой кнопкой мыши по нему.

TabContent класс:

class TabContent(wx.Panel) : 
def __init__(self, parent, id) : 
    # Calls the constructor for wx.Panel 
    wx.Panel.__init__(self, parent = parent, id = id) 

    # Creates a vertical sizer 
    sizer = wx.BoxSizer(wx.VERTICAL) 

    # Creates an empty multi-line wx.TextCtrl 
    textArea = wx.TextCtrl(self, style = wx.TE_MULTILINE) 

    # Adds the text area to the sizer 
    sizer.Add(textArea, 1, wx.EXPAND | wx.ALL, 2) 

    # Sets the previously created sizer as this panel's sizer 
    self.SetSizer(sizer) 

Notebook класс:

class Notebook(wx.Notebook) : 
    def __init__(self, parent) : 
     wx.Notebook.__init__(self, parent, id = wx.ID_ANY, style = wx.BK_DEFAULT) 

     # Initialises tab number to 1 
     self.untitledCounter = 1 

     # Adds an empty tab 
     self.addTab() 

     # Sets up events 
     self.Bind(wx.EVT_RIGHT_DOWN, self.onMouseRightClicked) 

    def onMouseRightClicked(self, event) : 
     print("Left button was clicked on tab " + str(self.GetCurrentPage().GetId())) 

ответ

-1

@Michael,

Попробуйте вызвать SetFocus() в обработчике событий для страницы.

+0

Как? Я хочу сфокусировать его, когда я нажимаю на него правой кнопкой мыши, но я уже пробовал, и он не работает. Единственный «рабочий метод» для меня - это щелчок левой кнопкой мыши по вкладке, затем он выбирается и, конечно, фокус на нем. Есть ли способ сделать это, щелкнув правой кнопкой мыши? Есть функция, которая, как только я нажимаю на мышь, получает объект под координатами курсора, например? – Michael

+0

@ Майкл, поэтому у вас есть wxNotebook с некоторыми страницами. Можно выбрать только одну страницу за раз. IIUC, вы хотите сделать правый щелчок на заголовке страницы и сделать эту страницу для выбора. Я прав? Что делать, если я делаю левый клик по тому же заголовку страницы? – Igor

+0

Да, вы правы. Если вы делаете левый щелчок, он выбирается, но я хочу, чтобы пользователь мог щелкнуть правой кнопкой мыши на вкладке; это откроет всплывающее меню с некоторыми параметрами, такими как «Закрыть», «Закрыть все» и т. д. Конечно, мне нужно каким-то образом определить вкладку, на которую я нажал. Например, в _medit_, если вы щелкните правой кнопкой мыши на вкладке, он не будет сфокусирован, но вы можете закрыть его. – Michael

-1

Вы можете найти, какая вкладка была нажата, используя метод Notebook's HitTest, а затем, если вы хотите, чтобы эта вкладка была активирована, вы можете вызвать метод Notebook SetSelection.

+0

Я сделал это: '' 'Защиту onMouseRightClicked (я, событие): mouseCoordinate = event.GetPosition() печать (ул (mouseCoordinate)) sel_item, флаги = self.HitTest (mouseCoordinate) печать (ул (sel_item)) '' ' , но везде, где я нажимаю, он всегда возвращает то же значение для' sel_item'. – Michael

Смежные вопросы