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

Posted

技术标签:

【中文标题】导入可以将值保存到另一个脚本中的 PyQt-GUI【英文标题】:Importing a PyQt-GUI that can save values into another script 【发布时间】:2016-05-30 08:48:18 【问题描述】:

我使用 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 个值并单击两个复选框。 OK 和 Cancel 似乎也可以正常工作。

我的问题:如何将其导入另一个脚本,然后我希望对话将变量 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】:

我好像找到了答案:

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 的值的任何解释?

【讨论】:

以上是关于导入可以将值保存到另一个脚本中的 PyQt-GUI的主要内容,如果未能解决你的问题,请参考以下文章

通过使用 java 脚本,我如何将值从一个 html 页面传递到另一个 html 页面? [复制]

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

使用列表将值从一个类传输到另一个类

如何使用会话将值从一个php页面传递到另一个页面

如何将值从一个活动中的片段传递到另一个活动? [复制]

如何通过 Dart 中的 onTap 函数将值传递到另一个屏幕?