【问题标题】:How to focus a wx.Notebook Page when right clicking on it右键单击 wx.Notebook 页面时如何聚焦它
【发布时间】:2016-11-27 15:57:43
【问题描述】:

我有一个带有一些标签/页面的Notebook 类(继承自wx.Panel)。

我目前在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)

笔记本类:

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()))

【问题讨论】:

    标签: python-3.x wxpython


    【解决方案1】:

    @迈克尔,

    尝试在页面的事件处理程序中调用 SetFocus()。

    【讨论】:

    • 怎么样?当我右键单击它时,我想聚焦它,但是我已经尝试过它并且它不起作用。对我来说,唯一的“工作方法”是左键单击一个选项卡,然后它被选中,当然焦点就在它上面。有没有办法通过右键单击来做到这一点?是否有一个功能,例如,一旦我单击鼠标,就可以获取光标坐标下的对象?
    • @Michael,所以你有一个带有一些页面的 wxNotebook。一次只能选择一页。 IIUC,您想要的是右键单击页面标题并使该页面成为选中状态。我对吗?如果我在同一个页面标题上左键单击会怎样?
    • 是的,你是对的。如果您左键单击它会被选中,但我希望用户能够右键单击选项卡;这将打开一个弹出菜单,其中包含一些选项,例如“关闭”、“全部关闭”等。当然,我需要一些方法来识别我单击的选项卡。例如,在 medit 中,如果您右键单击一个选项卡,它不会获得焦点,但您可以关闭它。
    【解决方案2】:

    您可以使用 Notebook 的 HitTest 方法找到单击了哪个选项卡,然后如果您希望激活该选项卡,您可以调用 Notebook 的 SetSelection 方法。

    【讨论】:

    • 我这样做了:def onMouseRightClicked(self, event) : mouseCoordinate = event.GetPosition() print(str(mouseCoordinate)) sel_item, flags = self.HitTest(mouseCoordinate) print(str(sel_item)),但无论我点击什么,它总是返回相同的 sel_item 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2015-03-21
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多