簡體   English   中英

如何從Python中的QDialog實例返回值?

[英]How to return values from a QDialog instance in Python?

我正在嘗試打開QtGui.QDialog,向用戶請求一組值,然后在單擊“保存”后返回這些值。

以下代碼應無需修改即可運行。

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()

非常感謝您的寶貴時間! 任何改進建議,我們將不勝感激!

更改此行中的返回值:

def save(self): 
    return self.eta2, self.eta2

至:返回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)

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM