You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt跨文件类属性访问问题:将A窗口输入同步到B窗口标签

PyQt跨窗口同步输入内容至标签文本

需求:在PyQt项目中,实现跨文件访问A.py中Ui_Form类的self.lineEdit属性,将用户在A窗口输入的内容设置为B窗口Ui_Form类的self.label文本。

现有代码

A.py

from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(203, 146)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
    
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

        self.pushButton.clicked.connect(self.open_other_window)
        self.pushButton.clicked.connect(Form.close)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "Enter"))

    def open_other_window(self):
        import B

        self.window = QtWidgets.QWidget()
        self.ui = B.Ui_Form()
        self.ui.setupUi(self.window)
        self.window.show()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec())

B.py

from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(Form)
        self.label.setText("Default Text")
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec())

已尝试的无效方法

  • 方法1:在B.py中实例化新的A窗口对象获取文本
# B.py中添加的方法
def change_text(self):
    import A

    win = QtWidgets.QWidget()
    obj = A.Ui_Form()
    obj.setupUi(win)

    txt = obj.lineEdit.text()
    self.label.setText(txt)

问题:新实例化的A窗口是空白的,并非用户正在操作的窗口实例,无法获取真实输入内容。

  • 方法2:在A.py中提前定义静态变量,B.py导入该变量
# A.py中添加的代码
win = QtWidgets.QWidget()
obj = Ui_Form()
obj.setupUi(win)

input_txt = obj.lineEdit.text()

# B.py中添加的方法
def change_text(self):
    import A
    
    txt = A.input_txt
    self.label.setText(txt)

问题:input_txt是窗口初始化时的空值,不会随用户输入动态更新,导入的是静态固定值。

正确解决方案

核心思路:在打开B窗口时,直接从当前A窗口的lineEdit获取实时文本,传递给B窗口的label。

修正后的A.py

修改open_other_window方法,在显示B窗口前设置其label文本:

def open_other_window(self):
    import B

    # 获取当前lineEdit的输入内容
    input_text = self.lineEdit.text()
    
    self.window = QtWidgets.QWidget()
    self.ui = B.Ui_Form()
    self.ui.setupUi(self.window)
    # 直接设置B窗口的label文本
    self.ui.label.setText(input_text if input_text else "Default Text")
    self.window.show()

(可选)优化方案:给B窗口添加专用方法

如果需要更灵活的文本设置,可以在B.py中添加一个设置文本的方法:

# B.py中添加方法
def set_label_text(self, text):
    self.label.setText(text if text else "Default Text")

然后在A.py的open_other_window中调用:

def open_other_window(self):
    import B

    input_text = self.lineEdit.text()
    
    self.window = QtWidgets.QWidget()
    self.ui = B.Ui_Form()
    self.ui.setupUi(self.window)
    self.ui.set_label_text(input_text)
    self.window.show()

这样点击A窗口的按钮后,B窗口的label就会同步显示用户在A窗口输入的内容。

内容的提问来源于stack exchange,提问作者user143114114

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:05:36