Как подавить выполнение currentTextChanged в редактируемом виджете QComboBox, когда я меняю выбранный элемент?Python

Программы на Python
Ответить
Anonymous
 Как подавить выполнение currentTextChanged в редактируемом виджете QComboBox, когда я меняю выбранный элемент?

Сообщение Anonymous »

У меня есть список словарей, которые представляют настройки, и редактируемый QComboBox, с помощью которого я хочу выбрать, какой словарь я сейчас изменяю, а также изменить один из ключей в словаре настроек. Вот минимальный рабочий пример того, что я создаю:

Код: Выделить всё

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()
Проблема, с которой я сталкиваюсь, заключается в том, что когда я переключаюсь на другой элемент в ComboBox, срабатывает сигнал editTextChanged и, что более важно, он срабатывает до сигнала currentIndexChanged. Это означает, что когда я меняю элемент в ComboBox, имя ранее выбранных настроек изменяется.
Как я могу подавить выполнение сигнала editTextChanged при изменении элемента или хотя бы заставить сначала выполнить функцию, связанную с currentIndexChanged?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -qcombobox
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»