图1 label显示的值会随着图3 lineEdit输入的值改变,那要怎么让这个数在图2的label里面显示出来啊。
图123 的三个控件在三个类里面,我每次用变量接收图1的 label都是空字符。
软件用的是python。
简单的例子。你可能需要根据你的实际情况进行修改:
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_())
以下内容引用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的值也会随之改变。