使用 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的主要内容,如果未能解决你的问题,请参考以下文章

QL Server 实用脚本

在树莓派上使用 python 库 Brother_ql 打印

我的项目仍在使用 graph-i-ql 而不是 Playground

DHCP备份和还原

golang 使用github.com/cznic/ql进行测试

模拟 graph-ql 请求