Wie unterdrücke ich die Ausführung von currentTextChanged in einem bearbeitbaren QComboBox-Widget, wenn ich das ausgewähPython

Python-Programme
Anonymous
 Wie unterdrücke ich die Ausführung von currentTextChanged in einem bearbeitbaren QComboBox-Widget, wenn ich das ausgewäh

Post by Anonymous »

Ich habe eine Liste von Wörterbüchern, die Einstellungen darstellen, und eine bearbeitbare QComboBox, mit der ich auswählen möchte, welches Wörterbuch ich gerade ändere, aber auch einen der Schlüssel im Einstellungswörterbuch ändern möchte. Hier ist ein minimal funktionierendes Beispiel dessen, was ich baue:

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()
Das Problem, mit dem ich konfrontiert bin, besteht darin, dass, wenn ich zu einem anderen Element in der ComboBox wechsle, das Signal editTextChanged ausgelöst wird und, was noch wichtiger ist, dies vor dem Signal currentIndexChanged geschieht. Dies bedeutet, dass, wenn ich ein Element in der ComboBox ändere, der Name der zuvor ausgewählten Einstellungen geändert wird.
Wie kann ich die Ausführung des Signals editTextChanged unterdrücken, wenn ich das Element ändere, oder zumindest die erste Ausführung der mit currentIndexChanged verbundenen Funktion erzwingen?
Um den Code effizienter zu machen, wie kann ich als sekundäre Frage vorübergehend die Ausführung der Signale der QSpinBox unterdrücken, wenn ich sie nach dem Umschalten auf Current aktualisiere ausgewähltes Element?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post