Ссылка на дочерние виджеты (QPushButton) в QScrollArea ссылается только на последний экземпляр объекта кнопки, независимо от того, какая кнопка нажата - PullRequest
0 голосов
/ 13 апреля 2020

Хорошо, так что я довольно глубоко в приложении, которое я делаю с использованием PyQt5, и у меня есть раздел (QScrollArea), где у меня по существу есть несколько строк «учетных записей», которые являются QWidgets. Пользователь может добавить учетную запись и удалить учетную запись, но я хотел бы дать им возможность редактировать учетную запись. В той же строке, что и учетная запись, находится QPushButton, который в основном является кнопкой редактирования. Если у меня 3 аккаунта, то я вижу 3 кнопки. Однако, когда я нажимаю кнопку для любой учетной записи, все кнопки ссылаются на один и тот же объект кнопки. Я храню объекты в списке и использую findChildren (), чтобы получить объекты. Оба из них дадут мне три разных объекта кнопки, но использование clicked.connect () с кнопками ссылается только на самую последнюю или самую нижнюю кнопку.

Я вызываю функцию clicked.connect () после того, как часть моего кода, которая добавляет учетную запись. Я также попытался переместить это прямо внизу, где я создаю экземпляр кнопки, но это не сработало.

Вот что у меня есть:

btns = self.accountsWidget.findChildren(QPushButton)
    for btn in btns:
        btn.clicked.connect(lambda: self.editAccount(btn))

Метод, который я вызываю, чтобы попытаться отредактировать учетную запись, находится здесь:

    def editAccount(self, btn):
        print(btn)
        self.editAccountWindow = EditAccountsWindow()
        self.editAccountWindow.show()

Результат напечатанного всегда последний объект QPushButton, и я только печатаю, чтобы увидеть, ссылаюсь ли я на нужную кнопку. Этот метод просто открывает окно, но то, что отображается в окне, зависит от вызова правильного объекта. Я хочу использовать объект для ссылки на то, какую учетную запись я хочу редактировать.

Я просмотрел множество SO-потоков и не смог найти ничего похожего на это. Я думаю, что что-то упустил, поэтому, пожалуйста, помогите брату:)

1 Ответ

0 голосов
/ 13 апреля 2020
def editAccount(self, objects):
    sender = self.sender()
    index = 0
    for object in objects:
        if sender == object:
            account = account_handler.get_account(index) 
            ...

widgets = self.accountsScrollView.findChildren(QWidget, "accountsWidget")
for widget in widgets:
    editButtons = widget.findChildren(QPushButton, 'editButtonAccounts')
    for e in range(0, len(editButtons)):
        editButtons[e].clicked.connect(lambda: self.editAccount(edit_objects_list))
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...