當我運行代碼時,它總是會列印出“First_TextSecond_Text”,無論我在 lineEdits 中放什么。
我想列印出用戶在視窗中放置的任何內容。運行代碼并獲得“第一個視窗”。
您將能夠在那里編輯文本。默認文本是“第一個文本”。按下“創建第二個視窗”按鈕,將創建具有類似 QLineEdit 文本輸入的第二個視窗。
您也可以編輯此文本。最后一個按鈕“列印第一個 第二個文本”應該列印出用戶在連接在一起的編輯器中輸入的任何內容。
不幸的是,它總是列印出放在一起的默認文本。我認為當我在“put_first_and_second_text_together”函式中初始化類時,它會將類重置為默認值。如果是這樣,則必須有另一種方法來獲取活動視窗的屬性。任何幫助,將不勝感激。
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()
uj5u.com熱心網友回復:
這些類不是“重置為默認值”:您正在創建兩個對話框的新實體,而不是使用現有的實體。
您還在第二個視窗中為父級創建一個新實體作為 的引數__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類也是錯誤的,而deleteLater僅適用于instance。
我強烈建議您對什么是類、實體和方法以及它們是如何作業的進行更多研究。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363451.html
