Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxPython:使用鼠标右键单击不设置焦点_Python_Focus_Wxpython_Copy Paste_Right Click - Fatal编程技术网

wxPython:使用鼠标右键单击不设置焦点

wxPython:使用鼠标右键单击不设置焦点,python,focus,wxpython,copy-paste,right-click,Python,Focus,Wxpython,Copy Paste,Right Click,我的GUI当前有右键单击选项(剪切、复制、粘贴) 但是,我意识到当我右键单击搜索栏(wx.SearchCtrl)尝试粘贴时,焦点没有设置在搜索栏上,因此我无法粘贴 self.panel.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup) def OnShowPopup(self, event): """ Obtain right-click selection """ pos = event.GetPosition() pos = self

我的GUI当前有右键单击选项(剪切、复制、粘贴)

但是,我意识到当我右键单击搜索栏(wx.SearchCtrl)尝试粘贴时,焦点没有设置在搜索栏上,因此我无法粘贴

self.panel.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup)

def OnShowPopup(self, event):
   """ Obtain right-click selection """
   pos = event.GetPosition()
   pos = self.panel.ScreenToClient(pos)
   self.panel.PopupMenu(self.rightClickMenu, pos)

def OnPopupItemSelected(self, event):
   """ Display right-click menu """
   item = self.rightClickMenu.FindItemById(event.GetId())
   text = item.GetText()
   elif text == "Paste":
      self.OnPaste()

def OnPaste(self, event = None):
   """ Paste content from clipboard """
   text = self.FindFocus()
   if text:
      if isinstance(text, wx.TextCtrl):
         text.Paste()
以下是我的想法: 获取鼠标右键单击时的位置。然后使用该位置将焦点设置在保持该位置的Ctrl上

这可能吗?还是有更好的解决方案

def OnShowPopup(self, event):
      """ Obtain right-click selection """

      pos = event.GetPosition()
      pos = self.panel.ScreenToClient(pos)
      event.GetEventObject().SetFocus()
      self.panel.PopupMenu(self.rightClickMenu, pos)

我认为这样可以很好地工作…

保存执行右键单击的对象,然后在选择“粘贴”后设置焦点。 event.GetEventObject().SetFocus()无法工作的原因很可能是因为在从弹出菜单中选择“粘贴”后,TextCtrl会失去焦点。所以文本不会在那里打印

def OnShowPopup(self, event):
   """ Obtain right-click selection """
   pos = event.GetPosition()
   pos = self.panel.ScreenToClient(pos)
   self.rightClickSelected = event.GetEventObject()
   self.panel.PopupMenu(self.rightClickMenu, pos)

def OnPaste(self, event = None):
   """ Paste content from clipboard """
   self.rightClickSelected.SetFocus()
   if isinstance(self.rightClickSelected, wx.TextCtrl):
      self.rightClickSelected.Paste()

它不起作用。我已经尝试用self、self.panel和self.search.edited替换我的\u wx\u search\u ctrl,以将焦点放在特定的小部件上。。。您也可以从EVT_RIGHT_向下弹出菜单,并摆脱对contextmenu事件的绑定。我开始使用wxPython小部件检查工具,它显示每当我右键单击TextCtrl或SearchCtrl时,wx.EVT_上下文_菜单被激活。在我使用的任何地方都没有EVT_RIGHT_DOWN的迹象:wxPython 2.8.10.1、Windows 7、Python 2.4我试图用event.skip()跳过wx.EVT_上下文菜单事件,希望wx.EVT_RIGHT_DOWN显示出来,但仍然没有显示。参考: