【发布时间】:2020-06-15 10:36:47
【问题描述】:
我有一个 QTableWidget 和一个 Delete QPushButton。
我希望仅在从 QTableWidget 中选择一行时启用删除按钮,如果未选择任何行,则应禁用该按钮。
在初始化时:
#Make rows selectable
self.tableWidget.setSelectionBehavior(QtWidgets.QTableWidget.SelectRows)
# Diable button initially
if not len(self.tableWidget.selectionModel().selectedRows()):
self.btnDelete.setEnabled(False)
这会将删除按钮设置为禁用状态。
如何在行选择时启用它?
使用: Windows10 上的 Python 3.8、PyQt5
编辑 1: 最小工作示例:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout
from PyQt5.QtCore import pyqtSlot
class App(QWidget):
def __init__(self):
super().__init__()
self.title = 'Fruits'
self.left = 0
self.top = 0
self.width = 300
self.height = 200
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.createTable()
self.btndelete = QtWidgets.QPushButton("DELETE")
self.btndelete.setObjectName("btndelete")
self.btndelete.clicked.connect(self.deleteRow)
if not len(self.tableWidget.selectionModel().selectedRows()):
self.btndelete.setEnabled(False)
self.layout = QVBoxLayout()
self.layout.addWidget(self.tableWidget)
self.layout.addWidget(self.btndelete)
self.setLayout(self.layout)
# Show widget
self.show()
def createTable(self):
# Create table
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(4)
self.tableWidget.setColumnCount(2)
self.tableWidget.setItem(0,0, QTableWidgetItem("Apple"))
self.tableWidget.setItem(0,1, QTableWidgetItem("15"))
self.tableWidget.setItem(1,0, QTableWidgetItem("Banana"))
self.tableWidget.setItem(1,1, QTableWidgetItem("11"))
self.tableWidget.setItem(2,0, QTableWidgetItem("Dogs"))
self.tableWidget.setItem(2,1, QTableWidgetItem("10"))
self.tableWidget.setItem(3,0, QTableWidgetItem("Cats"))
self.tableWidget.setItem(3,1, QTableWidgetItem("2"))
self.tableWidget.move(0,0)
# table selection
self.tableWidget.setSelectionBehavior(QtWidgets.QTableWidget.SelectRows)
def deleteRow(self):
pass
@pyqtSlot()
def on_click(self):
print("\n")
for currentQTableWidgetItem in self.tableWidget.selectedItems():
print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
【问题讨论】:
标签: python python-3.x pyqt pyqt5 qtablewidget