Code: Select all
from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox, QFrame, QVBoxLayout, QLabel, QSpinBox
settings_list = [{'name': 'Config 1', 'height': 10}, {'name': 'Config 2', 'height': 5}]
class PageDimensionsEditor(QMainWindow):
def __init__(self):
super().__init__()
frame = QFrame()
layout = QVBoxLayout()
# Grab the settings
self.current_index = 0
self.settings = settings_list[self.current_index]
names = [version['name'] for version in settings_list]
self.versionComboBox = QComboBox()
self.versionComboBox.setEditable(True)
self.versionComboBox.addItems(names)
self.versionComboBox.editTextChanged.connect(lambda value: self.change('name', value))
self.versionComboBox.currentIndexChanged.connect(lambda index: self.switchItem(index))
layout.addWidget(self.versionComboBox)
self.edits = {}
# Create a QSpinBox to change the height
layout.addWidget(QLabel("Height:"))
self.edits['height'] = QSpinBox(minimum=1, maximum=40, value=self.settings['height'])
self.edits['height'].valueChanged.connect(lambda value: self.change('height', value))
layout.addWidget(self.edits['height'])
frame.setLayout(layout)
self.setCentralWidget(frame)
def switchItem(self, index):
print(f"New Index: {index}")
self.current_index = index
self.settings = settings_list[index]
self.updateEntries()
def updateEntries(self):
for key, value in self.edits.items():
self.edits[key].setValue(self.settings[key])
def change(self, which, value):
print(f"{which} of settings in index {self.current_index} is changed to: {value}")
self.settings[which] = value
app = QApplication([])
window = PageDimensionsEditor()
window.show()
app.exec()
Wie kann ich die Ausführung des Signals editTextChanged unterdrücken, wenn ich das Element ändere, oder zumindest erzwingen, dass die mit currentIndexChanged verbundene Funktion zuerst ausgeführt wird?
Mobile version