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

Maya中使用PySide2如何获取两个不同窗口QLineEdit的输入文本

PySide2多窗口QLineEdit输入获取问题解决方案

问题核心原因

  • 你的猜测完全正确:put_first_and_second_text_together全局函数中每次触发都会重新实例化FirstWindow和SecondWindow类,得到的是全新的、处于默认值状态的窗口对象,和用户已经打开、输入过内容的活动窗口实例没有关联,所以永远只能拿到默认文本
  • 额外存在的错误:SecondWindow类的__init__方法默认参数写为parent=FirstWindow(),会在类定义阶段就生成一个独立的FirstWindow实例,不是实际启动的第一个活动窗口

修正后完整代码

from PySide2 import QtWidgets

class FirstWindow(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(FirstWindow, self).__init__(parent)
        # Set the Title of Window
        self.setWindowTitle("First Window")
        # Create QlineEdit
        self.lineedit = QtWidgets.QLineEdit()
        # Create button
        self.pushbutton = QtWidgets.QPushButton('Create Second Window')
        # Layout
        form_layout = QtWidgets.QFormLayout()
        form_layout.addRow(self.lineedit)
        form_layout.addRow(self.pushbutton)
        main_layout = QtWidgets.QVBoxLayout(self)
        main_layout.addLayout(form_layout)
        # Connections
        self.lineedit.setText('First_Text')
        self.pushbutton.clicked.connect(self.open_SecondWindow)
    
    def open_SecondWindow(self):
        # 把当前第一个窗口的实例作为父对象传给第二个窗口
        Window_ui = SecondWindow(parent=self)
        Window_ui.show()
    
class SecondWindow(QtWidgets.QDialog):
    # 修正parent默认参数,不要在默认值里实例化类
    def __init__(self, parent=None):
        super(SecondWindow, self).__init__(parent)
        # Set the Title of Window
        self.setWindowTitle("Second Window")
        # Create QlineEdit
        self.lineedit = QtWidgets.QLineEdit()
        # Create button
        self.pushbutton = QtWidgets.QPushButton('Print First + Second Text')
        # Layout
        form_layout = QtWidgets.QFormLayout()
        form_layout.addRow(self.lineedit)
        form_layout.addRow(self.pushbutton)
        main_layout = QtWidgets.QVBoxLayout(self)
        main_layout.addLayout(form_layout)
        # Connections
        self.lineedit.setText('Second_Text')
        # 绑定到当前类的方法,不需要全局函数
        self.pushbutton.clicked.connect(self.put_first_and_second_text_together)
    
    def put_first_and_second_text_together(self):
        # 通过self.parent()直接获取已经打开的第一个窗口实例
        first_text = self.parent().lineedit.text()
        # self就是当前打开的第二个窗口实例,直接取输入内容
        second_text = self.lineedit.text()
        print(first_text + second_text)

if __name__ == "__main__":
    try:
        FirstWindow_dialog.close()
        FirstWindow_dialog.deleteLater()
    except:
        pass
    FirstWindow_dialog = FirstWindow()
    FirstWindow_dialog.show()

逻辑说明

  • 打开第二个窗口时传入当前第一个窗口的实例作为父对象,第二个窗口可以随时通过self.parent()访问第一个窗口的所有公开属性和控件
  • 打印逻辑放到第二个窗口的类内部方法,直接用self获取当前第二个窗口的输入内容,不需要额外实例化窗口,拿到的就是用户当前输入的实时值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:05