我使用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之后发生事情(一些mayavi
和vtk
相关的事情)!
感谢您提供任何帮助!
答案 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
的值的任何解释?