python - 使用 qtbot.mouseClick 选择 QListWidgetItem
问题描述
如何使用 qtbot.mouseClick 单击 QListWidgetItem?
我使用以下代码进行了尝试,但在最终断言上失败了:
from PySide2 import QtWidgets, QtCore
import pytest
@pytest.fixture
def widget(qtbot):
widget = QtWidgets.QListWidget()
qtbot.addWidget(widget)
for i in range(10):
widget.addItem("Item %s" % (i + 1))
widget.show()
qtbot.wait_for_window_shown(widget)
return widget
def test_aa_click_item(qtbot, widget):
row = 7
item = widget.item(row)
rect = widget.visualItemRect(item)
center = rect.center()
assert widget.itemAt(center).text() == item.text()
assert widget.currentRow() == 0
qtbot.mouseClick(widget, QtCore.Qt.LeftButton, pos=center)
assert widget.currentRow() != 0
有什么我想念的吗?
解决方案
正如文档指出的那样:
QRect QListWidget::visualItemRect(const QListWidgetItem *item) const
返回视口上由 item 处的项目占用的矩形。
(强调我的)
位置中心是相对于viewport()的,因此您必须使用该小部件单击:
def test_aa_click_item(qtbot, widget):
row = 7
item = widget.item(row)
rect = widget.visualItemRect(item)
center = rect.center()
assert widget.itemAt(center).text() == item.text()
assert widget.currentRow() == 0
qtbot.mouseClick(widget.viewport(), QtCore.Qt.LeftButton, pos=center)
assert widget.currentRow() != 0
推荐阅读
- ios - (Swift) 将 UIDatePicker 选择的日期分配给 UITextField
- node.js - Kubernetes NodePort 在外部是不可访问的。拒绝连接
- html - 将 mkd 转换为 html 时,如何强制 pandoc 找到我的 css 文件?
- python - 如何根据天迭代熊猫中的数据集?
- angular - 检查更改是否正确但取消时出错
- c# - 实例化漂浮在空中的游戏对象
- regex - Blogger 中每个 archive.html 的正则表达式自定义重定向
- delphi - Delphi集成svn添加项目失败
- java - 泛型类的注解参数
- javascript - React Redux 连接函数中的打字稿错误