【发布时间】:2020-05-16 21:18:08
【问题描述】:
我正在尝试更改 QTableWidget 鼠标按下事件方法,以根据用户是右键单击还是左键单击来对单元格项执行不同的操作。当我左键单击 self.tableWidget 中的单元格时出现以下错误:
AttributeError: 'Table' object has no attribute 'tableWidget' (line 114 [commented below])
下面是我的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
from WordSearch import WordSearch as ws
ws = ws()
class Table(QtWidgets.QTableWidget): #overwriting QTableWidgets to allow for right click events
def __init__(self, *args, **kwargs):
QtWidgets.QTableWidget.__init__(self, *args, **kwargs)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
item = self.itemAt(event.pos())
print (item.row(), item.column()) #FOR DEBUGGUNG
Ui_MainWindow.leftClickLetter(self, item.row(), item.column())
elif event.button() == QtCore.Qt.RightButton:
print("RIGHT CLICK!") #FOR DEBUGGING
QtWidgets.QTableWidget.mousePressEvent(self, event)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
.....
self.generate.clicked.connect(self.generateTable)
.....
def generateTable(self):
self.tableWidget = Table(self.centralwidget)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(int(self.size.text()))
self.tableWidget.setRowCount(int(self.size.text()))
self.tableWidget.show()
def leftClickLetter(self, row, col):
item = self.tableWidget.item(row, col) #Line 114
item.setBackground(QtGui.QColor(216,191,216))
if (row, col) not in self.coordsToCheck:
self.coordsToCheck.append((row,col))
self.tableWidget.clearSelection()
我删除了一些我认为不相关的代码,但如果我应该添加它,请告诉我。 generateTable() 总是在 leftClickLetter() 之前调用,所以 self.tableWidget 应该是正确的 Table 类型变量名。
【问题讨论】:
标签: python pyqt pyqt5 qtablewidget