简体   繁体   English

如何从Python中的QDialog实例返回值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM