Выбор QListWidgetItem с помощью qtbot.mouseClick - PullRequest
3 голосов
/ 27 сентября 2019

Как я могу щелкнуть QListWidgetItem с помощью qtbot.mouseClick?

Я пробовал его с помощью следующего кода, но в конечном утверждении это не удалось:

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 Ответ

2 голосов
/ 27 сентября 2019

Как документы указывают:

QRect QListWidget :: visualItemRect (const QListWidgetItem * item) const

Возвращает прямоугольник в области просмотра , занятый элементом в элементе.

(выделено мной)

Позицияцентр по отношению к 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(<b>widget.viewport()</b>, QtCore.Qt.LeftButton, pos=center)

    assert widget.currentRow() != 0
...