Код: Выделить всё
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()
Как я могу подавить выполнение сигнала editTextChanged, когда я меняю элемент, или хотя бы заставить функцию, связанную с currentIndexChanged, выполняться первой?
В качестве второстепенного вопроса, чтобы сделать код более эффективным, как я могу временно подавить выполнение сигналов QSpinBox, когда я обновляю его после переключения выбранный в данный момент элемент?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -qcombobox
Мобильная версия