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