python pyqt6 qtableView首次在表中使用鼠标选择项目,“ selectionIndexes()”返回空列表
我有一个我无法弄清楚的问题。当我的表加载时,选择任何第一个项目并尝试通过selectionIndexes()
返回其索引,则索引为空。如果我然后单击其他任何地方,该方法会按预期工作。为什么?这是一些MRC:
from PyQt6.QtCore import pyqtSignal, Qt
from PyQt6.QtGui import QStandardItem, QStandardItemModel
from PyQt6 import QtWidgets as qt
import sys
class Main(qt.QMainWindow):
def __init__(self):
super().__init__()
frame = qt.QFrame()
self.setCentralWidget(frame)
laymb = qt.QVBoxLayout(frame)
model = QStandardItemModel()
tabmb = TableViewClick()
tabmb.setModel(model)
tabmb.setGridStyle(Qt.PenStyle(0))
tabmb.setSelectionMode(qt.QTableView.SelectionMode(1))
tabmb.setSelectionBehavior(tabmb.SelectionBehavior(1))
laymb.addWidget(tabmb)
subj = []
for e in range(10):
subj.append(QStandardItem('Testing...'))
model.appendColumn(subj)
tabmb.signal.connect(self._click_table)
def _click_table(self):
table = self.sender()
indexes = table.selectedIndexes()
print(indexes)
class TableViewClick(qt.QTableView):
signal = pyqtSignal()
def mousePressEvent(self, event):
self.signal.emit()
qt.QTableView.mousePressEvent(self, event)
app = qt.QApplication(sys.argv)
main_gui = Main()
main_gui.show()
sys.exit(app.exec())
如您所见,我已经将其绑在Mousepressevent
上,因为我需要调用_CLICK_TABLE
以备以后的代码。我已经有些故障排除,并且可以通过selectrow()
选择一行,并且没有发生,但是我不想这样做,因为GUI加载了已经选择的行。有什么想法如何获得第一次单击表中的任何地方以返回索引?使用索引,我将单击该行以获取以后的代码。如果有更好的方法,我对此持开放态度。但是,我想单击一个项目并获取行。
I am having an issue that I haven't been able to figure out. When my table loads, selecting any first item and attempting to return it's index via selectedIndexes()
, the index is empty. If I then click anywhere else, the method works as intended. Why? Here's some MRC:
from PyQt6.QtCore import pyqtSignal, Qt
from PyQt6.QtGui import QStandardItem, QStandardItemModel
from PyQt6 import QtWidgets as qt
import sys
class Main(qt.QMainWindow):
def __init__(self):
super().__init__()
frame = qt.QFrame()
self.setCentralWidget(frame)
laymb = qt.QVBoxLayout(frame)
model = QStandardItemModel()
tabmb = TableViewClick()
tabmb.setModel(model)
tabmb.setGridStyle(Qt.PenStyle(0))
tabmb.setSelectionMode(qt.QTableView.SelectionMode(1))
tabmb.setSelectionBehavior(tabmb.SelectionBehavior(1))
laymb.addWidget(tabmb)
subj = []
for e in range(10):
subj.append(QStandardItem('Testing...'))
model.appendColumn(subj)
tabmb.signal.connect(self._click_table)
def _click_table(self):
table = self.sender()
indexes = table.selectedIndexes()
print(indexes)
class TableViewClick(qt.QTableView):
signal = pyqtSignal()
def mousePressEvent(self, event):
self.signal.emit()
qt.QTableView.mousePressEvent(self, event)
app = qt.QApplication(sys.argv)
main_gui = Main()
main_gui.show()
sys.exit(app.exec())
As you can see, I've tied it to a mousePressEvent
because I need to call _click_table
for later code. I've troubleshot some and can select a row via selectRow()
, and the above does not happen, but I don't want to do that because the GUI loads with a row already selected. Any ideas how you can get the first time you click anywhere in the table to return the index? With the index I'm going to get the row clicked for later code. If there's a better way, I'm open to it. But, I want to click an item and get the row.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论