python - QTableView点击信号从未发出?
问题描述
我开始变得更加困惑。我不能像我想要的那样让 QTableView 发出它的信号。我将我的情况减少到不那么混乱的情况,即使在那种情况下,当我点击时我也无法获得任何信号。
例如,在该代码中,插槽“onClickedRow”在启动应用程序时被调用一次(我不知道为什么),但是我可以在任何地方随意点击,并且永远不会调用插槽:
import sys
from PySide2 import QtWidgets, QtCore, QtGui
class Message(QtCore.QAbstractItemModel):
def __init__(self):
super().__init__()
self.messageList = []
def addMessage(self, typeName, data):
self.messageList.append({"type": typeName,
"data": data})
def data(self, index, role):
if not index.isValid():
return None
if role != QtCore.Qt.DisplayRole:
return None
item = self.messageList[index.row()]
if index.column() == 0:
return str(item["type"])
else:
return str(item["data"])
def headerData(self, section, orientation, role):
if orientation == QtCore.Qt.Horizontal:
if role == QtCore.Qt.DisplayRole:
if section == 0:
return "type"
else:
return "data"
return None
def parent(self, index):
if not index.isValid():
return QtCore.QModelIndex()
return QtCore.QModelIndex()
def index(self, row, column, parent):
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
else:
return self.createIndex(row, column)
def flags(self, index):
if not index.isValid():
return QtCore.Qt.NoItemFlags
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
def columnCount(self, parent):
return 2
def rowCount(self, parent):
return len(self.messageList)
class FormMessageJournal(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.layout = QtWidgets.QVBoxLayout()
self.messageTable = QtWidgets.QTableView(self)
self.messageTable.clicked.connect(self.onClickedRow())
self.messageList = Message()
self.messageList.addMessage("Send", "Hello")
self.messageList.addMessage("Send", "Hello")
self.messageList.addMessage("Send", "Hello")
self.messageList.addMessage("Send", "Hello")
self.messageTable.setModel(self.messageList)
self.layout.addWidget(self.messageTable)
self.setLayout(self.layout)
def onClickedRow(self, index=None):
print("Click !")
if __name__ == "__main__":
app = QtWidgets.QApplication([])
widget = FormMessageJournal()
widget.show()
sys.exit(app.exec_())
我是唯一一个有这种问题的人吗?
解决方案
self.messageTable.clicked.connect(self.onClickedRow())
改成:
self.messageTable.clicked.connect(self.onClickedRow)
推荐阅读
- xcode - 由于xcode,无法在mac上使用python
- python - 使用 Pandas 和 Python 操作分层数据集
- c - 启用外部中断 ARM Cortex-M0+ (STM32G070)
- gradle - 是否可以强制 Gradle 降级具有特定扩展名的某些依赖项的版本
- javascript - React.js - 收到错误“渲染没有返回任何内容。” 从 switch 语句
- jenkins - 单个 repo 的多个 Jenkins 管道
- jquery - 是否可以使选项标签成为链接或按钮
- vuetify.js - 如何在 v-data-table 中显示图像?
- javascript - 扩展运算符如何使用 Javascript 中的迭代器/生成器从对象中获取值?
- reactjs - 为什么 ReactJS 需要编译