2016-11-27 13 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) 

ノートクラス:

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

@Michael、いくつかのページがあるwxNotebookがあります。一度に1ページしか選択できません。 IIUC、あなたがしたいのは、ページのタイトルを右クリックし、そのページを選択させることです。私は正しい?同じページタイトルを左クリックするとどうなりますか? – Igor

+0

はい、そうです。左クリックすると選択されますが、ユーザがタブを右クリックできるようにしたいと思います。これは、 "閉じる"、 "すべて閉じる"などのオプションを含むポップアップメニューを開きます。もちろん、クリックしたタブを識別する方法が必要です。たとえば、_medit_では、タブを右クリックしてもフォーカスは得られませんが、閉じることができます。 – Michael

-1

ノートブックのHitTestメソッドを使用してクリックされたタブを見つけることができます。このタブを有効にするには、NotebookのSetSelectionメソッドを呼び出すことができます。

+0

私はこれでした: '' 'デフonMouseRightClicked(自己、イベント): mouseCoordinate = event.GetPosition() プリント(STR(mouseCoordinate)) sel_item、フラグ= self.HitTest(mouseCoordinate) プリント(STR(sel_item) ) '' ' ですが、どこでもクリックすると、常に' sel_item'に同じ値が返されます。 – Michael

関連する問題