PyQt:如何更新QLabel文本(从另一个python文件/函数访问QT小部件)?

2024-07-05 09:09:55 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

我正在尝试用Python编写我的第一个GUI应用程序。我把我的程序分成两个文件:一个有GUI(图形用户界面.py)和第二个程序逻辑(测试.py)。在

我想在程序执行期间从测试.py级别。在

我不知道如何访问任何控件。在

代码:

图形用户界面.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from PyQt5.QtWidgets import QLabel, QPushButton, QGridLayout


class Ui_Widget(object):
    def setupUi(self):

        # controls
        statusLbl = QLabel("Status", self)
        changeBtn = QPushButton("&Change text", self)
        closeBtn = QPushButton("&Close", self)

        #statusLbl.setText("working") # <- here it works, but not in Test.py

        # GridLayout
        CtrLayout = QGridLayout()
        CtrLayout.addWidget(statusLbl, 0, 0)
        CtrLayout.addWidget(changeBtn, 0, 1)
        CtrLayout.addWidget(closeBtn, 0, 2)       
        self.setLayout(CtrLayout)

        # onClick events
        changeBtn.clicked.connect(self.changeText)
        closeBtn.clicked.connect(self.closeApp)

        #self.setGeometry(20, 20, 300, 100)
        #self.setWindowTitle("TEST APP")
        self.show()

测试.py

^{2}$

Tags: pyself应用程序connectgui图形用户界面clickedqpushbutton
2条回答

试试看:

from PyQt5.QtWidgets import QLabel, QPushButton, QGridLayout
from PyQt5.QtWidgets import QApplication, QWidget
#from GUI import Ui_Widget


class Ui_Widget(object):
    def setupUi(self):
        # controls
        self.statusLbl = QLabel("Status", self)                    # + self.
        changeBtn = QPushButton("&Change text", self)
        closeBtn  = QPushButton("&Close", self)
        #statusLbl.setText("working") # <- here it works, but not in Test.py

        # GridLayout
        CtrLayout = QGridLayout()
        CtrLayout.addWidget(self.statusLbl, 0, 0)    # self.
        CtrLayout.addWidget(changeBtn, 0, 1)
        CtrLayout.addWidget(closeBtn, 0, 2)       
        self.setLayout(CtrLayout)

        # onClick events
        changeBtn.clicked.connect(self.changeText)
        closeBtn.clicked.connect(self.closeApp)

        #self.setGeometry(20, 20, 300, 100)
        #self.setWindowTitle("TEST APP")
        self.show()


class TestApp(QWidget, Ui_Widget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setupUi()   

    def changeText(self):
        generateReport(self)  # code moved to separate function for better clarity

    def closeApp(self):
        self.close()

def generateReport(obj):

    if obj.statusLbl.text() != "working":
        obj.statusLbl.setText("working")                      # <- + obj.

    # ...
    # 200 lines of code here
    #...

    else:
        obj.statusLbl.setText("not " + obj.statusLbl.text())  # <- + obj.


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    WND = TestApp()
    WND.show()                   
    sys.exit(app.exec_())

enter image description here

您应该指出您想要访问ui。而不是:

statusLbl.setText("working")

您应该使用:

^{pr2}$

启动时,您应该传递self

self.statusLbl = QLabel("Status", self)

相关问题 更多 >