【问题标题】:Change label text in widget via mainwindow通过主窗口更改小部件中的标签文本
【发布时间】:2020-02-11 10:27:11
【问题描述】:

我对使用 Python 编程 GUI 很陌生...任何有经验的程序员很快就会发现。我正在处理的程序应该有一个带有嵌套 QTab 小部件的 MainWindow,该小部件又包含多个单独的小部件。我已经尝试了一段时间来让下面的简化代码工作。不幸的是,我得到了 AttributeError: 'bool' object has no attribute '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()

我很高兴得到这个问题的解决方案,以及我应该阅读什么主题的提示,以了解我做错了什么。任何结构性建议也受到高度赞赏...:)

谢谢,马克斯

【问题讨论】:

    标签: python pyqt5 signals qlabel


    【解决方案1】:

    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)
    
            ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      相关资源
      最近更新 更多