Reputation: 358
I'm trying to open a QtGui.QDialog, request a set of values from the user, then return the values after "save" is clicked.
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!
Upvotes: 0
Views: 5443
Reputation: 64
Change the return values in this line:
def save(self):
return self.eta2, self.eta2
to: return self.eta1, self.eta2
In main (of course your need to import 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.
Upvotes: 1