使用 qtbot.mouseClick 选择 QListWidgetItem
Posted
技术标签:
【中文标题】使用 qtbot.mouseClick 选择 QListWidgetItem【英文标题】:Selecting QListWidgetItem with qtbot.mouseClick 【发布时间】:2019-09-27 14:22:37 【问题描述】:如何使用 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
我有什么遗漏的吗?
【问题讨论】:
【参考方案1】:正如the docs 指出的那样:
QRect QListWidget::visualItemRect(const QListWidgetItem *item) const
返回视口上的矩形在item处被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
【讨论】:
以上是关于使用 qtbot.mouseClick 选择 QListWidgetItem的主要内容,如果未能解决你的问题,请参考以下文章
在树莓派上使用 python 库 Brother_ql 打印
我的项目仍在使用 graph-i-ql 而不是 Playground