mvc_1.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import sys
  2. from PyQt5.QtCore import Qt
  3. from PyQt5.QtWidgets import QMainWindow, QFormLayout, QLineEdit, QSpinBox, QComboBox, QPushButton, QApplication, QWidget
  4. model = {
  5. "name": "Johnina Smith",
  6. "age": 10,
  7. "favorite_icecream": "Vanilla",
  8. }
  9. class MainWindow(QMainWindow):
  10. def __init__(self):
  11. super().__init__()
  12. self.setWindowTitle("MVC Example")
  13. layout = QFormLayout()
  14. # Dictionary to store the form data, with default data.
  15. self.name = QLineEdit()
  16. self.name.setText(model["name"])
  17. self.name.textChanged.connect(self.on_name_changed)
  18. self.age = QSpinBox()
  19. self.age.setRange(0, 200)
  20. self.age.setValue(model["age"])
  21. self.age.valueChanged.connect(self.on_age_changed)
  22. self.icecream = QComboBox()
  23. self.icecream.addItems(["Vanilla", "Strawberry", "Chocolate"])
  24. self.icecream.setCurrentText(model["favorite_icecream"])
  25. self.icecream.currentTextChanged.connect(self.on_icecream_changed)
  26. self.save_btn = QPushButton("Save")
  27. self.restore_btn = QPushButton("Restore")
  28. layout.addRow("Name", self.name)
  29. layout.addRow("Age", self.age)
  30. layout.addRow("Favorite Ice Cream", self.icecream)
  31. layout.addRow(self.save_btn)
  32. layout.addRow(self.restore_btn)
  33. layout.setLabelAlignment(Qt.AlignLeft)
  34. widget = QWidget()
  35. widget.setLayout(layout)
  36. self.setCentralWidget(widget)
  37. def on_name_changed(self, value):
  38. model["name"] = value
  39. print(model)
  40. def on_age_changed(self, value):
  41. model["age"] = value
  42. print(model)
  43. def on_icecream_changed(self, value):
  44. model["favorite_icecream"] = value
  45. print(model)
  46. if __name__ == "__main__":
  47. app = QApplication(sys.argv)
  48. window = MainWindow()
  49. window.show()
  50. app.exec_()