gpt4 book ai didi

python - 在 QComboBox 的 View QTableView 中单击信号

转载 作者:行者123 更新时间:2023-11-28 22:25:19 25 4
gpt4 key购买 nike

我需要一个带有按钮的 QListView 用于 QComboBox,但是因为编写委托(delegate)是一个巨大的痛苦。我选择了 QTableView,因为每一行总是有相同的按钮。我唯一的问题是我似乎无法从 QComboBox 中捕捉到 clicked 信号。

我附上一个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_())

最佳答案

您可以使用以下信号触发组合框中的点击:

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.activated.connect(lambda: print('Click Combo')) # Works fine too
layout.addWidget(combo)

或者,如果您只需要检测单击或键盘输入何时更改所选项目:

combo.currentIndexChanged.connect(lambda: print('Click Combo'))

关于python - 在 QComboBox 的 View QTableView 中单击信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45576179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com