[英]How to return values from a QDialog instance in Python?
I'm trying to open a QtGui.QDialog, request a set of values from the user, then return the values after "save" is clicked. 我正在尝试打开QtGui.QDialog,向用户请求一组值,然后在单击“保存”后返回这些值。
The following code should run without modification. 以下代码应无需修改即可运行。
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()
Thank you very much for your time! 非常感谢您的宝贵时间! Any suggestions for improvement are greatly appreciated!
任何改进建议,我们将不胜感激!
Change the return values in this line: 更改此行中的返回值:
def save(self):
return self.eta2, self.eta2
to: return self.eta1, self.eta2 至:返回self.eta1,self.eta2
In main (of course your need to import sys): 在主要(当然,您需要导入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)
Add the second connection to what you already have: 将第二个连接添加到已有的连接中:
self.save__QBtn.clicked.connect(self.save)
self.save__QBtn.clicked.connect(self.close)
I hope this helps. 我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.