很明显按下并释放了QWidget按钮,遗憾的是没有触发任何动作。
环境类似于find qwidget object text by using pywinauto。该代码使用了How to click a 'next' button of a window using python的绝对坐标。
程序运行后,目标窗口将获得焦点。光标开始在靠近目标窗口中心的某处。然后它移动到按钮,按下按钮,因为颜色变为向下颜色。然后它释放按钮,光标移回窗口中心。只缺少一件事,没有从目标窗口应用程序中采取任何操作。
有一个修复:如果我将鼠标移动到窗口标题并在正确的时间单击,则自动单击该按钮将触发实际操作。这让我感到困惑的是为什么会发生这种情况,并且无法考虑解决方案。
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)
答案 0 :(得分:1)
Qt应用可以使用Application(backend='uia')
自动完成。请阅读使用新后端专门为pywinauto 0.6.0+编写的Getting Started Guide。它解释了核心概念和许多有用的技巧。
P.S。我已经下载了这个精简版应用程序,并将在稍后尝试为您做出示例。
答案 1 :(得分:0)
我仍然更喜欢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);
}
}
}