0
我一直在努力工作這幾天,沒有用,所以希望你們可以幫助我。改變行顏色點擊PyQt
我有一個自定義QSqlTableModel
有這個,因爲它的數據功能:
def data(self, index, role):
#Formats Cells according to data in them
if role == QtCore.Qt.TextAlignmentRole:
if index.column() == 2:
text = QtSql.QSqlTableModel.data(self, self.index(index.row(), 2), QtCore.Qt.DisplayRole)
if text.split():
if not re.search(r'start|Z[NARXTFEISL]|gv', text.split()[0], re.I):
return QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop
else: return QtCore.Qt.AlignLeft
else: pass
else: return QtCore.Qt.AlignLeft
if role == QtCore.Qt.BackgroundRole:
if 'MILESTONE' in QtSql.QSqlTableModel.data(self, self.index(index.row(), 2), QtCore.Qt.DisplayRole):
return QtGui.QBrush(QtCore.Qt.yellow)
return QtSql.QSqlTableModel.data(self, index, role)
這都不是除了BackgroundRole
塊真正的問題有關。我想要做的是,當我右鍵單擊tableview
上下文菜單上顯示:
menu = QMenu()
stepx = menu.addAction('Mark Step as Executed')
stepdx = menu.addAction('Clear Step Execution')
action = menu.exec_(self.tableView.mapToGlobal(pos))
index = self.model.index(self.tableView.rowAt(pos.y()), 2)
if action == stepx:
logging.info(' Executed Step: ' + str(self.tableView.rowAt(pos.y()) + 1))
self.model.setData(index, QtCore.QVariant(QtGui.QBrush(QtCore.Qt.red)), QtCore.Qt.BackgroundRole)
所有我想要做的是,當我點擊我的"Mark Step as Executed"
上下文菜單上,我想行(或甚至細胞,我會採取任何在這一點上)改變爲紅色。
沒有什麼我在做什麼工作,我希望有人可以幫助我。
非常感謝!這在某種意義上起作用,它的確會改變顏色,我喜歡我可以恢復顏色。但是,它似乎將整個表格改爲紅色。不只是所選的行。爲什麼會這樣? – aseylys
你確定嗎?在我的測試中,只需更改所選行,請嘗試以下示例,並讓我知道是否有相同的錯誤:https://gist.github.com/eyllanesc/150e981878122e171bd25dc470781a87 – eyllanesc
如果您分享項目以檢查您所做的項目一個失誤。如果我的答案可以幫助您,請不要忘記標記爲正確。 – eyllanesc