我正在尝试打开QtGui.QDialog,从用户请求一组值,然后在点击“save”后返回值。
以下代码应无需修改即可运行。
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()
非常感谢你的时间!非常感谢任何改进建议!
答案 0 :(得分:1)
更改此行中的返回值:
def save(self):
return self.eta2, self.eta2
to:return self.eta1,self.eta2
主要(当然你需要导入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)
我希望这会有所帮助。