我是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()
答案 0 :(得分:1)
名称wx.EVT_LEFT_DOWN
和wx.EVT_LEFT_UP
实际上只是您需要绑定到事件标识的数字不会导致事件发生!请查看docs and demos包中的示例。
基本过程是:
在帧初始化期间将处理程序绑定到您需要处理的事件,这些事件应该是fn(self, evt)
类型,并且按照惯例命名为onNameOfEvent
,例如def onLeftBtnDown(self, evt)
。 self.Bind(wx.EVT_NAME_OF_EVENT, onNameOfEvent)
这些包含您需要响应的事件,evt参数为您提供一个事件对象,其成员依赖于事件类型。事件绑定使用格式__init__
,通常在windows {{1}}方法中,(这是绝大多数GUI代码所做的,包括非wx GUI)。< / p>
如果,(更少见),您需要从代码 生成事件 ,而不是仅仅对事件做出反应 您还需要执行以上 ,然后通过声明适当类型的事件对象来创建事件,例如wx.CommandEvent,(请注意,您可以创建自己的事件类型),填充所需的值,然后使用'wx.PostEvent'将其添加到窗口的事件队列或控制它适用于。稍后,当它到达队列的顶部时,将使用此事件调用您的事件处理程序。