导入可以将值保存到另一个脚本的PyQt-GUI

时间:2016-05-30 08:48:18

标签: python qt user-interface module pyqt

我使用QtDesigner创建了一个GUI,将.ui转换为.py并为其创建了一个包装器。 GUI由3个DoubleSpinBox,两个复选框,OK,Cancel和一些标签组成。 ui文件(称为gyroidUI.py)有点冗长,所以我在这里省略它。包装器看起来像这样:

# gyroidUI_module.py
import sys
from PyQt4.QtGui import QApplication, QDialog
from gyroidUI import Ui_Form


class AppWindow(QDialog):
    def __init__(self):
        super().__init__()
        # QDialog.__init__(self)
        self.ui = Ui_Form()
        # Ui_Form.__init__(self)
        self.ui.setupUi(self)

        self.show()
        self.ui.OKButton.clicked.connect(self.OKButton_click)
        self.ui.CancelButton.clicked.connect(self.CancelButton_click)

    def OKButton_click(self):
        fill_ratio = self.ui.fill_ratio_box.value()
        contour_value = self.ui.contour_value_box.value()
        contours = self.ui.contours_box.value()

        use_contour_value = False
        if self.ui.check_contour_value.checkState() != 0:
            use_contour_value = True

        closed_surface = False
        if self.ui.check_closed_surface.checkState() != 0:
            closed_surface = True

        self.accept()
        print(fill_ratio, contour_value, contours, use_contour_value, closed_surface)
        return fill_ratio, contour_value, contours, use_contour_value, closed_surface

    def CancelButton_click(self):
        self.reject()
        raise InterruptedError("Program was cancelled by the user.")
        sys.exit(app.exec_())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = AppWindow()
    w.show()
    sys.exit(app.exec_())

包装器本身就可以正常工作。当我执行文件时弹出GUI,我可以设置3个值并单击两个复选框。确定和取消似乎也可以正常工作。

我的问题:如何将其导入另一个脚本,然后我希望对话框将变量fill_ratio, contour_value, contours, use_contour_value, closed_surface保存为相应的值?

我试过

import gyroidUI_module

app = gyroidUI_module.AppWindow()
app.show()
# here comes the rest of my program where I want to use the GUI input values

但是窗口只弹出一秒钟,关闭并且程序结束而不执行我的其余脚本。这是重要的部分:我想在GUI之后发生事情(一些mayavivtk相关的事情)!

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:-1)

好像我找到了答案:

app = gyroidUI_module.AppWindow()
app.show()

result = app.exec_()
if result == 1:
    fill_ratio = app.ui.fill_ratio_box.value()
    contour_value = app.ui.contour_value_box.value()
    contours = int(app.ui.contours_box.value())

    if app.ui.check_contour_value.checkState() != 0:
        use_contour_value = True
    else:
        use_contour_value = False

    if app.ui.check_closed_surface.checkState() != 0:
        closed_surface = True
    else:
        closed_surface = False

我不确定为什么它会做它的功能,但至少我的代码现在可以正常工作。关于我为什么需要检查if子句中result的值的任何解释?