Не могу использовать мой виджет Qcombobox в методе, почему? - PullRequest
1 голос
/ 10 апреля 2020

Впервые в pyQt я пытаюсь заполнить Qcombobox списком элементов, а затем получить текст, выбранный пользователем. Все работает нормально, за исключением того, что, когда срабатывает сигнал CurrentIndexChanged, я не могу получить индекс выбора, но не текст, с .currentText () в моем методе, потому что у меня есть ошибка, сообщающая, что я не могу вызвать мой виджет в методе. Python не распознает мой QCombobox в методе, поэтому я не могу использовать .currentText () и не могу понять почему.

Спасибо!

См. Мой код ниже .

class MainWindow(QMainWindow):        
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.setWindowTitle("Votre territoire")

        layout = QVBoxLayout()

        listCom = self.getComINSEE()
        cbCommunes = QComboBox()
        cbCommunes.addItems(listCom)
        cbCommunes.currentIndexChanged.connect(self.selectionChange)

        layout.addWidget(cbCommunes)

        cbCommunes = QWidget()
        cbCommunes.setLayout(layout)

        self.setCentralWidget(cbCommunes)


    def getComINSEE(self):
        # some code to fill my list com
        return com

    def selectionChange(self, i):
        # Error : unhandled AttributeError "'MainWindow' object has no attribute 'cbCommunes'"
        texte = self.cbCommunes.currentText()
        print(f"Index {i} pour la commune {i}")

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec()

1 Ответ

1 голос
/ 10 апреля 2020

Чтобы получить доступ к объекту в любом методе класса, вам нужно сделать этот объект атрибутом класса.

изменить cbCommunes на self.cbCommunes - везде.

from PyQt5.Qt import *


class MainWindow(QMainWindow):        
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setWindowTitle("Votre territoire")

        listCom = self.getComINSEE()
        self.cbCommunes = QComboBox()
        self.cbCommunes.addItems(listCom)
        self.cbCommunes.currentIndexChanged.connect(self.selectionChange)

        centralwidget = QWidget()
        self.setCentralWidget(centralwidget)

        layout = QVBoxLayout(centralwidget)
        layout.addWidget(self.cbCommunes)

    def getComINSEE(self):
        # some code to fill my list com
        com = ['item 1', 'item 2', 'item 3', 'item 4', 'item 5',]
        return com

    def selectionChange(self, i):
        # Error : unhandled AttributeError "'MainWindow' object has no attribute 'cbCommunes'"
        texte = self.cbCommunes.currentText()
        print(f"Index {i} pour la commune {i}, texte -> {texte}")


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

enter image description here

...