怎么让图2label 显示图1label的数值啊?

img


图1

img


图2

img


图3

图1 label显示的值会随着图3 lineEdit输入的值改变,那要怎么让这个数在图2的label里面显示出来啊。
图123 的三个控件在三个类里面,我每次用变量接收图1的 label都是空字符。
软件用的是python。

基于Monster 组和GPT的调写:

  • 用信号和槽机制(Signal and Slot mechanism)来实现这个功能。这是 Qt 中用于处理事件的关键机制。在你的情况中,你可以在图1的 label 值改变时发送一个信号,然后在图2的 label 中接收这个信号,并更新其值。

简单的例子。你可能需要根据你的实际情况进行修改:



from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QLabel, QLineEdit, QVBoxLayout, QWidget, QApplication
import sys

class LabelOne(QLabel):
    value_changed = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.setText("该路口的饱和度指数是 95.0")

    def update_value(self, new_value):
        self.setText(f"该路口的饱和度指数是 {new_value}")
        self.value_changed.emit(self.text())


class LabelTwo(QLabel):
    def __init__(self):
        super().__init__()
        self.setText("该路口的交通效率指数是 0")

    def update_value(self, new_value):
        self.setText(new_value)


class LineEdit(QWidget):
    def __init__(self, label_one, label_two):
        super().__init__()
        layout = QVBoxLayout()
        self.line_edit = QLineEdit()
        layout.addWidget(self.line_edit)
        self.setLayout(layout)

        self.label_one = label_one
        self.label_two = label_two
        self.line_edit.textChanged.connect(self.update_labels)

    def update_labels(self):
        new_value = self.line_edit.text()
        self.label_one.update_value(new_value)
        self.label_two.update_value(self.label_one.text())


class Window(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        self.label_one = LabelOne()
        self.label_two = LabelTwo()
        self.line_edit = LineEdit(self.label_one, self.label_two)

        layout.addWidget(self.label_one)
        layout.addWidget(self.label_two)
        layout.addWidget(self.line_edit)

        self.setLayout(layout)


app = QApplication(sys.argv)

window = Window()
window.show()

sys.exit(app.exec_())
  • 创建了两个自定义的 QLabel (LabelOne 和 LabelTwo),以及一个自定义的 QLineEdit (LineEdit)。LineEdit 有一个 update_labels 方法,当 QLineEdit 中的文本改变时,这个方法会被调用。这个方法会更新 LabelOne 和 LabelTwo 中的值。
  • LabelOne 中的 update_value 方法会发送一个 value_changed 信号,这个信号会被 LabelTwo 的 update_value 方法接收,然后更新 LabelTwo 中的值。

以下内容引用CHATGPT、有用望采纳:

可以在图1的类中定义一个函数,用来获取当前label的值,然后将这个函数作为信号发送出去,图2的类中连接这个信号,并将信号传来的值设置为图2的label的文本。具体实现如下所示:

在图1的类中定义一个获取label值的函数,并将该函数定义为信号:

from PyQt5.QtCore import pyqtSignal, QObject

class Widget1(QObject):
    valueChanged = pyqtSignal(str)
    
    def __init__(self, parent=None):
        super().__init__(parent)
        # 其他初始化代码
    
    def getLabelValue(self):
        return self.label.text()
    
    # 其他代码

然后在需要更新图2的label的地方,发送该信号:

class Widget1(QObject):
    valueChanged = pyqtSignal(str)
    
    def __init__(self, parent=None):
        super().__init__(parent)
        # 其他初始化代码
    
    def onLineEditChanged(self):
        value = self.lineEdit.text()
        self.label.setText(value)
        self.valueChanged.emit(value)  # 发送信号
    
    def getLabelValue(self):
        return self.label.text()
    
    # 其他代码

在图2的类中,连接该信号,并将信号传来的值设置为label的文本:

from PyQt5.QtCore import pyqtSlot

class Widget2(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        # 其他初始化代码
        self.widget1 = Widget1()
        self.widget1.valueChanged.connect(self.onValueChanged)
    
    @pyqtSlot(str)
    def onValueChanged(self, value):
        self.label.setText(value)
    
    # 其他代码

这样,当图1的label的值发生变化时,图2的label的值也会随之改变。