Изменить текст метки в виджете через главное окно - PullRequest
0 голосов
/ 11 февраля 2020

Я довольно новичок в программировании GUI с Python ..., как скоро узнает любой опытный программист. Предполагается, что в программе, над которой я работаю, есть MainWindow с вложенным виджетом QTab, который, в свою очередь, содержит несколько отдельных виджетов. Я уже некоторое время пытаюсь заставить работать следующий фрагмент упрощенного кода. К сожалению, я получаю AttributeError: объект 'bool' не имеет атрибута 'label_00'.

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QAction, QWidget, QVBoxLayout, QTabWidget, QToolBar
from PyQt5.QtCore import Qt, QSize, pyqtSignal, pyqtSlot
#from PyQt5 import QtGui 
#from LftQAFs import *

class MainWindow(QMainWindow):

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

        self.initUI()

    def initUI(self):
        self.setWindowTitle("Light")
        self.setGeometry(100,100,750,120)

        toolbar = QToolBar("Tool Bar")
        toolbar.setIconSize(QSize(24,24))
        self.addToolBar(toolbar)

        button_loadLftQAF = QAction("Load Data", self)
        toolbar.addAction(button_loadLftQAF)  
        button_loadLftQAF.triggered.connect(SubWidget.funcTest)

        self.setCentralWidget(SubWidget())

        self.show()

class SubWidget(QWidget):

    signalFuncTest = pyqtSignal()

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

        self.layout_main = QVBoxLayout(self)

        self.label_00 = QLabel("Label")
        self.layout_main.addWidget(self.label_00)

        self.setLayout(self.layout_main)

    @pyqtSlot()
    def funcTest(self):        
        print("works")
        self.label_00.setText('Changed Label')


app = QApplication([])

window = MainWindow()
window.show()

app.exec()

Я был бы очень рад получить решение этой проблемы, а также подсказку, что topi c I Надо читать дальше, чтобы понять, что я сделал не так. Любой структурный совет также высоко ценится ...:)

Спасибо, Макс

1 Ответ

0 голосов
/ 11 февраля 2020

SubWidget.funcTest - это метод экземпляра, что означает, что вам нужно сначала создать экземпляр SubWidget, например, sub_widget = SubWidget(), и подключить sub_widget.funcTest к button_loadLftQAF.triggered вместо SubWidget.funcTest, например,

class MainWindow(QMainWindow):

    ...

    def initUI(self):

        ...

        sub_widget = SubWidget(self)
        button_loadLftQAF.triggered.connect(sub_widget.funcTest)

        self.setCentralWidget(sub_widget)

        ...
...