0

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!

1
  • 1
    The save button has absolutely no function in your programm. Commented Sep 1, 2014 at 14:49

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.