【发布时间】:2019-02-19 15:27:54
【问题描述】:
我创建了一个 Qtablewidget 作为一个类,并创建了一个 add_button 来添加行,一个 delete_button 来从表中向上删除行。我想将功能连接到按钮,但它不能正常工作。我已经使用 getattr 方法调用该函数,但仍然不起作用。
桌子
为了解释更多,这些脚本行给出了属性错误。当它们被 button.clicked.connect 方法调用时。
add_button.clicked.connect(self._addrow)
delete_button.clicked.connect(self._removeItem)
脚本如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, Qt
class loadtable(QtWidgets.QTableWidget):
def __init__(self, parent=None):
super(loadtable, self).__init__(parent)
self.setColumnCount(5)
self.setRowCount(1)
self.setFont(QtGui.QFont("Helvetica", 10, QtGui.QFont.Normal, italic=False))
headertitle = ("A","B","C","D","E")
self.setHorizontalHeaderLabels(headertitle)
self.verticalHeader().setVisible(False)
self.horizontalHeader().setHighlightSections(False)
self.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Fixed)
self.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
self.setColumnWidth(0, 130)
combox_lay = QtWidgets.QComboBox(self)
combox_lay.addItems(["I","II"])
self.setCellWidget(0, 4, combox_lay)
self.cellChanged.connect(self._cellclicked)
#self.cellChanged.connect(self._addrow)
#self.cellDoubleClicked.connect(self._removerow)
def _cellclicked(self):
self.value = self.currentItem()
self.value.setTextAlignment(Qt.AlignCenter)
#if self.value is not None:
#return self.value.setTextAlignment(Qt.AlignCenter)
def _addrow(self):
rowcount = self.rowCount()
print(rowcount)
self.setRowCount(rowcount+1)
combox_add = QtWidgets.QComboBox(self)
combox_add.addItems(["I","II"])
self.setCellWidget(rowcount, 4, combox_add)
def _removerow(self):
self.removeRow(1)
class thirdtabloads(QtWidgets.QWidget):
def __init__(self, parent=None):
super(thirdtabloads, self).__init__(parent)
table = loadtable()
button_layout = QtWidgets.QVBoxLayout()
add_button = QtWidgets.QPushButton("Add")
add_button.clicked.connect(self._addrow)
delete_button = QtWidgets.QPushButton("Delete")
delete_button.clicked.connect(self._removeItem)
button_layout.addWidget(add_button, alignment=QtCore.Qt.AlignBottom)
button_layout.addWidget(delete_button, alignment=QtCore.Qt.AlignTop)
tablehbox = QtWidgets.QHBoxLayout()
tablehbox.setContentsMargins(10,10,10,10)
tablehbox.addWidget(table)
grid = QtWidgets.QGridLayout(self)
grid.addLayout(button_layout, 0, 1)
grid.addLayout(tablehbox, 0, 0)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = thirdtabloads()
w.show()
sys.exit(app.exec_())
【问题讨论】:
-
如果你有n行,当你按下delete_button按钮时,应该删除哪一行?
-
一个选项是从第一行删除最后一行。第二个选项我想选择一行然后删除它。
-
请决定,您要删除第一行还是最后一行?
-
最后一个被删除:)
标签: python pyqt pyqt5 qtablewidget qpushbutton