Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/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-在GUI上无法识别鼠标单击_Python_Wxpython - Fatal编程技术网

WxPython-在GUI上无法识别鼠标单击

WxPython-在GUI上无法识别鼠标单击,python,wxpython,Python,Wxpython,我是python新手。我正在尝试根据搜索字符串从youtube收集链接。假设我想要的链接将是我搜索结果的第一个结果。 我面临的问题是gui上无法识别鼠标单击。它只是移动到x,y坐标系,但我看不到它被点击了。请帮助我了解为什么无法识别此点击 下面是代码:我在wxpython中创建了一个GUI,我试图单击youtube的搜索栏,然后粘贴搜索字符串,然后单击搜索,从第一个结果中获取链接地址。下面的代码是示例代码。在我的真实代码中,搜索字符串将从excel工作表中传递 import win32ap

我是python新手。我正在尝试根据搜索字符串从youtube收集链接。假设我想要的链接将是我搜索结果的第一个结果。 我面临的问题是gui上无法识别鼠标单击。它只是移动到x,y坐标系,但我看不到它被点击了。请帮助我了解为什么无法识别此点击

下面是代码:我在wxpython中创建了一个GUI,我试图单击youtube的搜索栏,然后粘贴搜索字符串,然后单击搜索,从第一个结果中获取链接地址。下面的代码是示例代码。在我的真实代码中,搜索字符串将从excel工作表中传递

   import win32api, win32con
   import win32com.client as win32
   from win32com.client import Dispatch, Constants
   import os
   import time
   import win32clipboard
   import wx
   import wx.html2
   import sys




   x_pad = 0
   y_pad = 0


   def leftClick():
       wx.EVT_LEFT_DOWN
       time.sleep(.1)
       wx.EVT_LEFT_UP
       print "Click."          #completely optional. But nice for debugging purposes.

   def rightClick():
       wx.EVT_RIGHT_DOWN
       time.sleep(.1)
       wx.EVT_RIGHT_UP
       print "Right Click."     #completely optional. But nice for debugging purposes.


   def mousePos(cord):
       win32api.SetCursorPos((x_pad + cord[0], y_pad + cord[1]))

   class URL(wx.Frame):

       def __init__(self, *args, **kw):
           super(URL, self).__init__(*args, **kw) 

           self.InitUI()




       def InitUI(self):   
           pnl = wx.Panel(self)
           sbtn = wx.Button(pnl, label='Start', pos=(850, 560))
           cbtn = wx.Button(pnl, label='Close', pos=(850, 610))
           stdot = wx.TextCtrl(pnl, pos =(400,580),size=(400,80), style=wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
           sys.stdout = stdot
           sys.stderr = stdot

           sbtn.Bind(wx.EVT_BUTTON, self.OnStart)
           cbtn.Bind(wx.EVT_BUTTON, self.OnClose)



           brwser = wx.html2.WebView.New(pnl, size = (1280,550), pos = (0,0), url =("http://www.youtube.com/results?search_query=sarabhai+vs+sarabhai+episode+25&sm=3"))        


           self.SetSize((1280, 720))
           self.SetTitle('YouTube URL Grab')
           self.SetPosition((0,0))
           self.Show(True)


       def OnStart(self,e):
           win32clipboard.OpenClipboard()
           win32clipboard.EmptyClipboard()
           win32clipboard.SetClipboardText("Sarabhai vs Sarabhai episode 31") #Sample string for search
           win32clipboard.CloseClipboard()
           mousePos((252, 53))
           leftClick()
           leftClick()
           leftClick()
           rightClick()
           time.sleep(5)
           mousePos((280, 144))
           leftClick()
           time.sleep(5)
           mousePos((755, 53))
           leftClick()
           time.sleep(7)
           mousePos((467, 140))
           rightClick()
           time.sleep(5)
           mousePos((514, 321))
           leftClick()


       def OnClose(self, e):

           self.Close(True) 


   def main():

       ex = wx.App()
       URL(None)
       ex.MainLoop()    


   if __name__ == '__main__':
       main()  

名称
wx.EVT_LEFT_DOWN
wx.EVT_LEFT_UP
实际上只是事件标识的数字,您需要绑定到它们不会导致事件发生!查看文档和演示包中的示例

基本过程是:

在帧初始化期间,将处理程序绑定到您需要处理的事件,这些处理程序的类型应为
fn(self,evt)
,并且按照惯例命名为
onnameofent
,例如
def onLeftBtnDown(self,evt)
这些包含您需要响应的事件,evt参数为您提供一个事件对象,其成员取决于事件类型。事件绑定使用格式
self.Bind(wx.EVT\u NAME\u OF\u event,onnameofent)
,通常在windows
\uuuu init\uuuu
方法中(这是绝大多数GUI代码所做的,包括非wx GUI)


如果(很少)您需要从代码中生成事件,而不仅仅是对事件作出反应,您仍然需要执行上述操作,那么您需要通过声明适当类型的事件对象来创建事件,例如wx.CommandEvent,(请注意,您可以创建自己的事件类型),使用所需的值填充,然后使用“wx.PostEvent”将其添加到应用它的窗口或控件的事件队列中。稍后,当它到达队列顶部时,您的事件处理程序将被此事件调用。

谢谢您的输入。我确实查阅了wxpython文档,但不幸的是,我不知道应该如何进一步进行。让我知道我是否缺少一些基本的东西。扩展的解释添加了@just10分钟-希望有帮助。