1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QDialogButtonBox
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QFormLayout
from PyQt5.QtWidgets import QGroupBox
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import QVBoxLayout
from gui.helper import append_file_extension
class FormWindow(QDialog):
def __init__(self, form_model):
super(FormWindow, self).__init__()
self.__form_model = form_model
self.__form_group_box = QGroupBox()
self.setWindowTitle('Form')
self.create_form()
button_box = QDialogButtonBox(QDialogButtonBox.Save | QDialogButtonBox.Cancel)
button_box.accepted.connect(self.accept)
button_box.rejected.connect(self.reject)
main_layout = QVBoxLayout()
main_layout.addWidget(self.form_group_box)
main_layout.addWidget(button_box)
self.setLayout(main_layout)
@property
def form_model(self):
return self.__form_model
@property
def form_group_box(self):
return self.__form_group_box
def create_form(self):
layout = QFormLayout()
for question in self.form_model.block:
show = question.evaluate_visibility_condition(self.form_model)
question.pyqt5_render(layout, self.form_model, show)
question.widget.on_change(self.form_model.update_questions_on_change)
self.form_group_box.setLayout(layout)
@pyqtSlot(name='accept')
def accept(self):
file_name, _ = QFileDialog.getSaveFileName(QFileDialog(), 'Save results', self.form_model.identifier,
'JSON (*.json);;All Files (*)')
if file_name:
file_name = append_file_extension(file_name, 'json')
file = open(file_name, 'w')
file.write(self.form_model.to_json())
file.close()
self.close()
QMessageBox.information(QMessageBox(), 'Submission', 'Your answers have been submitted successfully.',
QMessageBox.Close, QMessageBox.Escape)
else:
QMessageBox.warning(QMessageBox(), 'Warning', 'Questionnaire results were not saved.',
QMessageBox.Close, QMessageBox.Escape)
@pyqtSlot(name='reject')
def reject(self):
self.hide()
|