我在PYQT中有一个主窗口和一个对话框。我在主窗口中接收来自用户的输入,然后打开对话框窗口并将输入传递到此窗口。
在对话框窗口中,我再次接收到另一个输入,并将这个新输入与我从主窗口传递的其他输入一起添加。

class MainWindow (QMainWindow):
def __init__(self):
super().__init__()
self.window=Ui_MainWindow()
self.window.setupUi(self)
def open_qdialog_window(self):
self.dialog_window = Qdialog(self.window.lineedit1.currentText())
self.dialog_window .show()
class Qdialog(QDialog):
def __init__(self,DS_parameter):
super().__init__()
self.DS_parameters=DS_parameters
#UI file of oscilloscope
self.window=Ui_Qdialog()
self.window.setupUi(self)
self.UI()
def summation(self):
self.DS_parameters=self.DS_parameters+self.window.lineedit2.currentText()现在的问题是如何将self.DS_parameters返回到主窗口并用这个新值更新editline1?
发布于 2021-04-02 00:56:44
对我来说,很难为你的代码提供具体的(可能更有帮助的)反馈,因为你分享的部分是不完整的。然而,我希望我的比较笼统的答案是有用的。
在Qt中,signals用于在图形用户界面元素之间建立连接。其基本思想是,事件触发函数的执行。例如,每当按下按钮时,就会更新一些文本。下面是一个工作示例,演示了如何将总和返回到主窗口并更新相应的行。
from PyQt5.QtWidgets import (
QApplication,
QMainWindow,
QDialog,
QWidget,
QVBoxLayout,
QLineEdit,
QLabel,
QPushButton
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.user_input = QLineEdit()
self.populate()
self.show()
def populate(self):
widgets = [QLabel("Insert a number"), self.user_input]
centralWidget = self.group_widgets(widgets)
self.setCentralWidget(centralWidget)
def group_widgets(self, widgets):
parentWidget = QWidget()
layout = QVBoxLayout()
for widget in widgets: layout.addWidget(widget)
parentWidget.setLayout(layout)
return parentWidget
def when_input(self, function):
self.user_input.textChanged.connect(function)
class Dialog(QDialog):
def __init__(self):
super().__init__()
self.user_input = QLineEdit()
self.admin_input = QLineEdit("0")
self.button = QPushButton("add")
self.relay_sum = None # function to relay result of addition
self.populate()
self.show()
def populate(self):
widgets = self.get_widgets()
layout = self.get_layout(widgets)
self.setLayout(layout)
def get_widgets(self):
widgets = [
QLabel("Inserted number"),
self.user_input,
QLabel("Insert the second number"),
self.admin_input,
self.button
]
return widgets
def get_layout(self, widgets):
layout = QVBoxLayout()
for widget in widgets: layout.addWidget(widget)
return layout
def when_buttonReleased(self, function):
self.relay_sum = function
self.button.released.connect(self.process_input)
def process_input(self):
user_number = float(self.user_input.text())
admin_number = float(self.admin_input.text())
result = "%.2f" %(user_number + admin_number)
self.relay_sum(result)
def main():
app = QApplication([])
mainWindow = MainWindow()
dialog = Dialog()
mainWindow.when_input(lambda text: dialog.user_input.setText(text))
dialog.when_buttonReleased(lambda text: mainWindow.user_input.setText(text))
app.exec_()
if __name__ == "__main__":
main()正如您已经注意到的,我允许自己更改您建议的变量名称。在该示例中,创建了两个窗口并建立了两个连接:
1.连接每当主窗口的文本改变(MainWindow.user_input.textChanged)时,新文本被设置为对话窗口中相应行的内容(Dialog.user_input.setText)。
2.连接每当释放对话窗口中的按钮(Dialog.button.released)时,对对话窗口中的值求和,并将结果设置为主窗口的文本(MainWindow.user_input.setText)。
https://stackoverflow.com/questions/64343633
复制相似问题