pywinauto qwidget click trigers no action

很明显,QWidgetbutton被按下并释放,不幸的是没有动作被触发。

该环境类似于使用pywinauto查找qwidget对象文本 。 代码使用绝对坐标如何使用python单击窗口的“下一个”button 。

一旦程序运行,目标窗口将获得焦点。 光标开始在靠近目标窗口中心的地方。 然后它移动到button,按下button,因为颜色变成了下降的颜色。 然后释放button,光标移回窗口的中心。 只有一件事情没有,从目标窗口应用程序不采取任何行动。

有一个解决方法:如果我将鼠标移动到窗口的标题,并在正确的时间点击,自动点击button将触发一个真实的行动。 这让我感到困惑,为什么会发生这种情况,而无法想出解决scheme。

app1 = Application() app1.connect(title_re='^Quartus Prime Programmer.*$') app1.QWidget.print_control_identifiers() win1 = app1.QWidget rect1 = win1.rectangle() coor1 = (rect1.left+64,rect1.top+350) # 64, 350: "add file" win11 = win1.TopLevelParent() for i in range(3): win11.SetFocus() win11.PressMouseInput(coords=coor1) time.sleep(1.3) win11.ReleaseMouseInput() time.sleep(3.0) 

代码重复三次,以便人工干预可以很容易地插入到过程中。 在这里输入图像说明

Solutions Collecting From Web of "pywinauto qwidget click trigers no action"

Qt应用程序可以使用Application(backend='uia')自动执行。 请阅读为新的后端pywinauto 0.6.0 +专门编写的入门指南 。 它解释了核心概念和许多有用的技巧。

PS我已经下载了这个精简版的应用程序,并会尽力为你做一个例子。

我仍然喜欢python或pywinauto的解决方案。 这是一个使用java机器人的临时解决方法,只是为了实现它。 python将通过命令行调用它java -jar TestQuartusClick.jar 64 350 1 ,其中64 350 1是坐标和调用引用号。

 import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; import java.util.logging.Level; import java.util.logging.Logger; public class TestQuartusClick { public static void main(String[] args){ int x = 0, y = 0, fn = 0; if ( args.length == 3 ) { x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); fn = Integer.parseInt(args[2]); /* reference */ } else { System.out.println("java error args size not 3"); return; } System.out.println(String.format( "java input %d %d %d", x, y, fn)); Robot bot; try { bot = new Robot(); int mask = InputEvent.BUTTON1_DOWN_MASK; bot.mouseMove(x, y); bot.mousePress(mask); bot.mouseRelease(mask); System.out.println(String.format( "java clicked %d %d %d", x, y, fn)); } catch (AWTException ex) { System.out.println(String.format( "java error click %d %d %d", x, y, fn)); //Logger.getLogger(TestQuartusClick.class.getName()).log(Level.SEVERE, null, ex); } } }