Item Auswahl einer Combobox löscht eins in der anderen.

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Chrisso
User
Beiträge: 3
Registriert: Mittwoch 19. Dezember 2018, 10:48

Hallo ihr Lieben Python/PyQt Freunde,

ich bastel gerade recht erfolglos an meiner GUI rum und komme jetzt nicht weiter. Ich möchte, dass die Auswahl in einer Combobox, eine andere Combobox ansteuert und daraus den gleichen Namen löscht. Man kann es sich so vorstellen, dass es im Konzern mehrere Divisionen gibt und diese repräsentieren eine jeweilige Combobox1/2/3 mit Namen des dort zuständigen Personals usw. Dann gibt es noch weitere Comboboxen, wo alle Namen aller Divisioinen enthalten sind. Diese dient dazu, Personen die krank oder im Urlaub sind zu benennen. Da eine Person auch in mehreren Divisionen vertreten sein kann, soll die eine Combobox für Krank/Urlaub die ausgewählten Namen aus den Divisionscomboboxen herauslöschen und nur noch das verfügbare Personal anzeigen. Soweit so gut, bei mir kommt aber das problem, dass er egal welchen namen ich anklicke, immer der gleiche Index gelöscht wird in der Definition. Hier ein kurzes Beispiel:

Code: Alles auswählen

import sys
from qtpy import QtWidgets

from ui.mainwindow import Ui_MainWindow

app = QtWidgets.QApplication(sys.argv)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent = None):
        super().__init__(parent)

        self.setWindowTitle("ZSP")


        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.B29.addItems(['','xxx', 'yyy', 'zzz'])
        self.ui.comboBox.addItems(['','xxx', 'yyy', 'zzz'])


        self.ui.comboBox.activated.connect(self.example_1)
        self.ui.comboBox.activated.connect(self.example_2)
        self.ui.comboBox.activated.connect(self.example_3)



    def example_1(self, text):
        index = self.ui.comboBox.findText("xxx")
        self.ui.B29.removeItem(index)

    def example_2(self, text):
        index_1 = self.ui.comboBox.findText("yyy")
        self.ui.B29.removeItem(index_1)

    def example_3(self, text):
        index_2 = self.ui.comboBox.findText("zzz")
        self.ui.B29.removeItem(index_2)





window = MainWindow()

window.show()

sys.exit(app.exec_())
Ich mache hier iwas extremst grundlegend falsch, aber ich blicke nicht mehr durch :-/ Über Hilfe wäre ich echt Dankbar :)

Beste Grüße

Chrisso
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du den suchtext hart kodierst kann er ja auch nicht dynamisch sein. Du musst schon den übergebenen Text nehmen.

Abgesehen davon, dass man so etwas so nicht lösen würde. Statt zu löschen, solltest du nur die Auswählbarkeit beeinflussen. Das ist sonst verwirrend für die Nutzer.
Chrisso
User
Beiträge: 3
Registriert: Mittwoch 19. Dezember 2018, 10:48

WIe kann ich denn die Auswahl beeinflussen? Also diese Möglichkeit wäre auch besser. Habe dazu aber nicht viel verwertbares gefunden oder ich habe falsch gesucht. Grundsätzlich löscht er ja mit jeder Auswahl ein Item, aber er führt ja gleich alle aus durch das signal an den Slot. Er soll ja eigentlich nur sehen "Aha, da ist der Name und den Suche ich in der anderen Combobox und mache diesen nicht wählbar oder lösche ihn". Aber so geht er hin und löscht nicht den index, wo der name gesucht wird.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man macht das, indem man der ComboBox ein AbstractListModel zur Seite stellt, statt von Hand Items hinzuzufuegen. Und das kennt dann verschiedene "flags" wie das in der Qt-Lingo heisst.

http://doc.qt.io/qt-5/qt.html#ItemFlag-enum
Chrisso
User
Beiträge: 3
Registriert: Mittwoch 19. Dezember 2018, 10:48

Also ich habe es jetzt herausgefunden mit Hilfe diverser Foren:

Code: Alles auswählen

    self.ui.comboBox1.currentTextChanged(self.example_1)
  
def example_1(self, text):
    self.ui.ComboBox2.removeItem(self.ui.ComboBox2.findText(text))
Antworten