如何从 QlineEdits 中获取两个不同 windows 中的文本?我在 Maya 中使用 PySide2
How can I get the text from QlineEdits in two different windows? I'm using PySide2 within Maya
当我 运行 代码时,它总是会打印出“First_TextSecond_Text”,无论我在 lineEdits 中放入什么。
我想打印出用户在 windows 中输入的任何内容。
运行 代码并获得“第一个 Window”。
您将能够编辑其中的文本。默认文本是“第一个文本”。
按下按钮“创建第二个 Window”,将创建第二个 window 具有类似的 QLineEdit 文本输入。
您也可以编辑此文本。
最后一个按钮“打印第一个 + 第二个文本”应该打印出用户在串联在一起的编辑器中键入的任何内容。
不幸的是,它总是打印出放在一起的默认文本。
我认为当我在“put_first_and_second_text_together”函数中初始化 类 时,它会将 类 重置为默认值。
如果是这样,则必须有另一种方法来获取活动的 windows' 属性。任何帮助将不胜感激。
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()
Window_ui.show()
class SecondWindow(QtWidgets.QDialog):
def __init__(self, parent=FirstWindow()):
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(put_first_and_second_text_together)
def put_first_and_second_text_together():
# Initialise
first_win = FirstWindow()
second_win = SecondWindow()
# Get Text
first_text = first_win.lineedit.text()
second_text = second_win.lineedit.text()
# Print Text
print(first_text + second_text)
if __name__ == "__main__":
try:
FirstWindow_dialog.close()
FirstWindow.deleteLater()
except:
pass
FirstWindow_dialog = FirstWindow()
FirstWindow_dialog.show()
classes 不是“重置为默认值”:您正在创建两个对话框的 新 实例,而不是使用现有的。
您还在第二个 window 中为父级创建一个新实例作为 __init__
的参数,除了一个糟糕的选择之外毫无意义。
将父参数与现有实例一起使用,并使函数成为实例方法。
class FirstWindow(QtWidgets.QDialog):
# ...
def open_SecondWindow(self):
window_ui = SecondWindow(self)
window_ui.show()
class SecondWindow(QtWidgets.QDialog):
def __init__(self, parent=None):
super(SecondWindow, self).__init__(parent)
# ...
self.pushbutton.clicked.connect(self.put_first_and_second_text_together)
def put_first_and_second_text_together(self):
first_text = self.parent().lineedit.text()
second_text = self.lineedit.text()
print(first_text + second_text)
另请注意,您的 try/except
块是错误的,因为 FirstWindow
是 class,而 deleteLater
仅适用于 实例 .
我强烈建议您对 classes、实例和方法是什么以及它们如何工作进行更多研究。
当我 运行 代码时,它总是会打印出“First_TextSecond_Text”,无论我在 lineEdits 中放入什么。
我想打印出用户在 windows 中输入的任何内容。 运行 代码并获得“第一个 Window”。
您将能够编辑其中的文本。默认文本是“第一个文本”。 按下按钮“创建第二个 Window”,将创建第二个 window 具有类似的 QLineEdit 文本输入。
您也可以编辑此文本。 最后一个按钮“打印第一个 + 第二个文本”应该打印出用户在串联在一起的编辑器中键入的任何内容。
不幸的是,它总是打印出放在一起的默认文本。 我认为当我在“put_first_and_second_text_together”函数中初始化 类 时,它会将 类 重置为默认值。 如果是这样,则必须有另一种方法来获取活动的 windows' 属性。任何帮助将不胜感激。
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()
Window_ui.show()
class SecondWindow(QtWidgets.QDialog):
def __init__(self, parent=FirstWindow()):
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(put_first_and_second_text_together)
def put_first_and_second_text_together():
# Initialise
first_win = FirstWindow()
second_win = SecondWindow()
# Get Text
first_text = first_win.lineedit.text()
second_text = second_win.lineedit.text()
# Print Text
print(first_text + second_text)
if __name__ == "__main__":
try:
FirstWindow_dialog.close()
FirstWindow.deleteLater()
except:
pass
FirstWindow_dialog = FirstWindow()
FirstWindow_dialog.show()
classes 不是“重置为默认值”:您正在创建两个对话框的 新 实例,而不是使用现有的。
您还在第二个 window 中为父级创建一个新实例作为 __init__
的参数,除了一个糟糕的选择之外毫无意义。
将父参数与现有实例一起使用,并使函数成为实例方法。
class FirstWindow(QtWidgets.QDialog):
# ...
def open_SecondWindow(self):
window_ui = SecondWindow(self)
window_ui.show()
class SecondWindow(QtWidgets.QDialog):
def __init__(self, parent=None):
super(SecondWindow, self).__init__(parent)
# ...
self.pushbutton.clicked.connect(self.put_first_and_second_text_together)
def put_first_and_second_text_together(self):
first_text = self.parent().lineedit.text()
second_text = self.lineedit.text()
print(first_text + second_text)
另请注意,您的 try/except
块是错误的,因为 FirstWindow
是 class,而 deleteLater
仅适用于 实例 .
我强烈建议您对 classes、实例和方法是什么以及它们如何工作进行更多研究。