PyQt6中如何实现取消单元格选中时按钮置为不可用?
解决QTableView取消选中时禁用按钮的问题
你的现有代码已经实现了选中单元格时启用按钮,但缺少取消选中时的禁用逻辑。问题出在on_click方法里,只判断了选择模型存在,却没检查是否有实际选中的单元格。
只需修改on_click方法,判断当前是否有选中项即可:
import sys from PyQt6.QtGui import QStandardItemModel, QStandardItem from PyQt6.QtWidgets import QApplication, QPushButton, QTableView, QVBoxLayout, QWidget class MyWindow(QWidget): def __init__(self): super(MyWindow, self).__init__() self.buttonEdit = QPushButton('Edit') self.qtable = QTableView() self.buttonEdit.setEnabled(False) data = [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']] self.model = QStandardItemModel() for row in range(len(data)): for column in range(len(data[row])): item = QStandardItem(data[row][column]) self.model.setItem(row, column, item) self.qtable.setModel(self.model) self.qtable.selectionModel().selectionChanged.connect(self.on_click) self.box = QVBoxLayout() self.box.addWidget(self.qtable) self.box.addWidget(self.buttonEdit) self.setLayout(self.box) def on_click(self): # 检查是否有选中的单元格 has_selection = self.qtable.selectionModel().hasSelection() self.buttonEdit.setEnabled(has_selection) if __name__ == '__main__': app = QApplication(sys.argv) main_window = MyWindow() main_window.resize(600, 800) main_window.show() sys.exit(app.exec())
关键修改说明:
- 替换原
on_click方法的判断逻辑,使用hasSelection()方法直接判断当前是否有选中项 - 当有选中项时启用按钮,无选中项(点击空白区域取消选中)时自动禁用按钮
内容的提问来源于stack exchange,提问作者Diman
相关产品推荐
相关产品推荐

