Ich brauche eine QListView
mit Tasten für eine QComboBox
, aber seit Delegaten schreiben ist ein großer Schmerz. Ich habe mich stattdessen für eine QTableView
entschieden, da es für jede Zeile immer die gleichen Tasten gibt. Mein einziges Problem ist, dass ich nicht das clicked
Signal von innerhalb der QComboBox
fangen kann.Klick-Signal in QTableView die Ansicht von QComboBox
angebracht ich einen MWe zu veranschaulichen, was ich meine:
from PyQt5.QtCore import QModelIndex, Qt, QAbstractTableModel, QVariant
from PyQt5.QtWidgets import QApplication, QComboBox, QTableView, QWidget, QVBoxLayout
class Model(QAbstractTableModel):
def data(self, index, role=Qt.DisplayRole):
if role == Qt.DisplayRole:
col = index.column()
if col == 0:
return str(index.row())
elif col == 1:
return '✎'
elif col == 2:
return '✘'
return QVariant()
def columnCount(self, parent=QModelIndex()):
return 3
def rowCount(self, parent=QModelIndex()):
return 5
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
model = Model()
main = QWidget()
layout = QVBoxLayout(main)
view = QTableView()
view.clicked.connect(lambda _: print('Click Table')) # Works fine
view.setModel(model)
layout.addWidget(view)
combo = QComboBox()
combo.setModel(model)
combo.setView(QTableView())
combo.view().clicked.connect(lambda _: print('Click Combo')) # Does'nt show
layout.addWidget(combo)
main.resize(500, 300)
main.show()
sys.exit(app.exec_())
Vielen Dank für Ihre Antwort. Das scheint die richtige Richtung zu sein. Wie bekomme ich den Index des Klicks? 'combo.activated.connect (lambda ind: drucken (f'Click Combo {ind} '))' gibt mir nur die Zeile, aber nicht die Spalte. –