Sto usando PyQt4
, ma questo è abbastanza generale da poter essere applicato solo a QT
.PyQt (o solo QT). Come ottenere QComboBox per attivare un segnale ogni volta che è impostato su un valore (anche se invariato)
ho una serie di QComboBoxes
che riempio da sinistra a destra (ad esempio la selezione di un elemento in più a sinistra popolerà il prossimo. La selezione di un elemento in quella popoleranno il successivo, e così via)
Sto avendo difficoltà a far scattare i miei segnali in tutte le situazioni (cioè indipendentemente dal fatto che l'indice corrente cambi o meno E indipendentemente dal fatto che l'elemento sia impostato dall'utente o impostato programmaticamente).
Più particolare:
mi baso sui segnali del primo QCombox
a fuoco ogni volta che un elemento è selezionato in modo che possa popolare il prossimo QCombobox
nella GUI. Allora mi affido a THAT QCombobox
per emettere un segnale in modo da poter popolare quello successivo. E così via.
Desidero preselezionare un elemento in ogni QCombobox
in base all'interazione dell'utente con l'interfaccia utente.
Ho una funzione univoca per QCombobox
che è responsabile per la compilazione e la preselezione di solo QCombobox
. Il codice simile a questa:
comboBox1.blockSignals(True)
comboBox1.clear()
comboBox1.addItems(sorted(itemList))
comboBox1.blockSignals(False)
comboBox1.setCurrentIndex(intLastSavedState1)
dove intLastSavedState1
è un numero intero che deriva dal testo che è stato selezionato dall'utente l'ultima volta che avevano usato l'applicazione scorso. Speravo che l'ultima riga di questa funzione avrebbe generato un segnale che avrebbe causato il caricamento della funzione della casella combinata successiva e la preselezione di un elemento (comboBox2
). E quell'azione causerebbe quindi la successiva funzione comboBox's
da attivare e passerebbe al successivo e al successivo. Ma non sta funzionando in tutti i casi.
Ho provato due versioni dei segnali:
self.connect(comboBox1, QtCore.SIGNAL("currentIndexChanged(const QString&)"), self.load_comboBox2)
e
self.connect(comboBox1, QtCore.SIGNAL("activated(const QString&)"), self.load_comboBox2)
Nel primo caso, il segnale sarà fuoco solo se il intLastSavedState1
è diverso da tutto ciò che è correntemente selezionato nella casella combinata. Ciò causa un problema se l'utente ha selezionato l'ultimo elemento 0 da quella lista. In questo caso, QT
non riconosce il mio script impostando l'indice corrente su 0 come una modifica (poiché dopo aver caricato la casella sembra che sia già sull'indice 0), e quindi il segnale non si attiva.
Nel secondo caso, il segnale scatterà indipendentemente da ciò che è attualmente selezionato nella casella combinata ... ma solo se attivato dall'utente. Non si attiva quando il mio script tenta di impostare l'indice corrente in modo programmatico.
Queste sembrano essere le mie uniche due opzioni per quanto riguarda i segnali. Quindi ... c'è un altro modo di preselezionare gli articoli in uno QCombobox
che attiverà un segnale ogni volta?
Mi sembra ragionevole se funzioni. Questo metodo di concatenamento per il ripristino dello stato precedente offre un vantaggio rispetto all'utilizzo di un'unica routine di ripristino che blocca i segnali mentre si ripristinano tutti e tre contemporaneamente? –
Non riesco a ripristinare tutti e tre poiché il contenuto di # 2 dipende da cosa è stato selezionato per # 1. E i contenuti del # 3 possono essere determinati solo in base a ciò che è stato selezionato per il # 2, ecc ... – bvz
Lo stesso problema per me. Ma la dichiarazione sopra ha funzionato bene quando l'ho implementata in un QWidget ma quando ho codificato in QMainWindow, i valori di ComboBox non attivano nulla .... – vettipayyan