在PyQt中模拟鼠标单击事件

6

我想在Python中模拟鼠标单击事件,作用于ui.goButton小部件。

这是我的做法:

QtTest.QTest.mouseClick(self.ui.goButton, QtCore.Qt.LeftButton)

这是正确的方法吗?因为它没有起作用。


我不确定我理解你所说的“模拟”的意思?你是想处理鼠标点击事件还是生成一个鼠标点击事件? - liaK
1
@liaK:我想生成一个鼠标点击事件,也就是说,我希望按钮能够接收到 SIGNAL("clicked()") 信号,而不需要用户实际点击它。 - Vilfrin
你是在测试还是希望你的应用程序实际上能够以那种方式工作? - Davor Lucic
@rebus:我实际上想以那种方式工作...这可能是糟糕的设计,但我现在必须忍受它并完成它。 - Vilfrin
1个回答

5

根据您对评论的回复,我将回答您的问题。

基本上信号可以通过以下方式发射

emit signalToBeEmitted()

所以,如果您想发送 QPushButtonclicked() 信号,您需要继承 QPushButton,然后可以像这样 emit clicked() 发送信号。 这个例子 将帮助您发送信号。
但我的问题是为什么要这么做?
通过发射 clicked() 信号,您将调用 connect 的槽。那么为什么不直接自己调用槽,而是要发射信号再调用槽呢?
请记住,slots 只是普通的函数,可以像其他函数一样调用。
否则,如果槽在另一个对象中存在,您将通过信号连接该对象,而不是弄乱预定义的信号,可以自己发射信号。
在我看来,即使是短期内也不要发射这种预定义信号。
希望对您有所帮助。
编辑:
哎呀,我没有看到 PyQt。我习惯于使用 C++ 的 Qt。我不知道 Python。但我相信大多数 Qt 的概念都是通用的。所以我会保留我的答案。

2
虽然这可能是回复中针对特定问题的正确答案,但我需要模拟真正的鼠标点击事件,以便将点击传递给QStyledItemDelegate下的鼠标下部件。我在研究时遇到了这个问题。我同意这个答案,但我认为我的需求仍然是一个有效的用户故事。在我看来,将其添加到这个答案中是值得的。可能只需要使用构造的事件实例执行mousePressEvent,但我还不确定... - Rafe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接