如何从 Python 中的 QDialog 实例返回值?
Posted
技术标签:
【中文标题】如何从 Python 中的 QDialog 实例返回值?【英文标题】:How to return values from a QDialog instance in Python? 【发布时间】:2014-08-11 19:13:41 【问题描述】:我正在尝试打开一个 QtGui.QDialog,向用户请求一组值,然后在单击“保存”后返回这些值。
以下代码无需修改即可运行。
import sys
from PySide import QtCore, QtGui
import numpy as np
class MyQDialog(QtGui.QDialog):
def __init__(self, parent=None):
super(MyQDialog, self).__init__(parent)
## Default values
self.eta1 = 1.0
self.eta2 = 1.0
## Create labels and buttons
frameStyle = QtGui.QFrame.Sunken | QtGui.QFrame.Panel
self.eta1__QL = QtGui.QLabel(str(self.eta1))
self.eta1__QL.setFrameStyle(frameStyle)
self.eta1__QBtn = QtGui.QPushButton("Set eta1:")
self.eta2__QL = QtGui.QLabel(str(self.eta2))
self.eta2__QL.setFrameStyle(frameStyle)
self.eta2__QBtn = QtGui.QPushButton("Set eta2:")
self.cancel__QBtn = QtGui.QPushButton("Cancel")
self.save__QBtn = QtGui.QPushButton("Save")
self.eta1__QBtn.clicked.connect(self.set_eta1)
self.eta2__QBtn.clicked.connect(self.set_eta2)
self.cancel__QBtn.clicked.connect(self.cancel)
self.save__QBtn.clicked.connect(self.save)
## Set layout, add buttons
layout = QtGui.QGridLayout()
layout.setColumnStretch(1, 1)
layout.setColumnMinimumWidth(1, 250)
layout.addWidget(self.eta1__QBtn, 1, 0)
layout.addWidget(self.eta1__QL, 1, 1)
layout.addWidget(self.eta2__QBtn, 2, 0)
layout.addWidget(self.eta2__QL, 2, 1)
layout.addWidget(self.cancel__QBtn, 3, 0)
layout.addWidget(self.save__QBtn, 3, 1)
self.setLayout(layout)
self.setWindowTitle("Thank you for reading!")
## Button functions
def set_eta1(self):
self.eta1, ok = QtGui.QInputDialog.getDouble(self,
"Change of variable", "Rate (type 1):", 0.1, 0, 1e8, 3)
if ok:
self.eta1__QL.setText(str(self.eta1))
def set_eta2(self):
self.eta2, ok = QtGui.QInputDialog.getDouble(self,
"Change of variable", "Rate (type 2):", 0.3, 0, 1e8, 3)
if ok:
self.eta2__QL.setText(str(self.eta2))
def cancel(self):
self.close()
def save(self):
return self.eta2, self.eta2
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
edit_params__QD = MyQDialog()
if edit_params__QD.exec_():
value1, value2 = edit_params__QD.save()
print 'Success!', value1, value2
else:
print 'I shouldn\'t print, but I do.'
sys.exit()
非常感谢您的宝贵时间!非常感谢任何改进建议!
【问题讨论】:
保存按钮在您的程序中完全没有任何功能。 【参考方案1】:更改此行中的返回值:
def save(self):
return self.eta2, self.eta2
to:返回self.eta1,self.eta2
在 main 中(当然你需要导入 sys):
app = QtGui.QApplication(sys.argv)
edit_params__QD = MyQDialog()
edit_params__QD.exec_()
if edit_params__QD.result() == 0:
value1, value2 = edit_params__QD.save()
print('Success!', value1, value2)
将第二个连接添加到您已有的连接:
self.save__QBtn.clicked.connect(self.save)
self.save__QBtn.clicked.connect(self.close)
我希望这会有所帮助。
【讨论】:
以上是关于如何从 Python 中的 QDialog 实例返回值?的主要内容,如果未能解决你的问题,请参考以下文章
MFC 应用程序中的 Qt DLL - 如何使 QDialog *真正* 模态?
如何从另一个 QDialog 访问组合框的文本并将其写入该对话框中的 lineEdit