QComboBox
のボタンを使用してQListView
ボタンが必要ですが、書き込み代理人は非常に苦痛です。私はQTableView
を選んだのですが、常に各行に同じボタンがあるためです。私の唯一の問題は、QComboBox
の中からclicked
信号を捕まえることができないということです。QComboBoxのビューであるQTableViewのクリック信号
私は私が何を意味するか説明するMWEを添付:
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_())
ありがとうございます。それは正しい方向性のようです。クリックのインデックスを取得するにはどうすればよいですか? 'combo.activated.connect(lambda ind:print(f'Click Combo {ind} '))'は行だけを返しますが、列は返しません。 –