pyqt5中实现QTableWidget 表格右键菜单delete功能,实现delet操作,并在sqlite3中实时删除
时间: 2024-03-27 22:38:42 浏览: 269
利用QTableView表格视图实现右击菜单删除功能.zip
要实现QTableWidget表格的右键菜单delete功能,可以通过以下步骤实现:
1.在QTableWidget中重写contextMenuEvent()函数,以获取右键菜单事件。
2.创建QMenu对象,并添加要显示的菜单项,如“删除”等。
3.将菜单项关联到相应的槽函数,以实现删除操作。
4.在槽函数中,获取选中的行号,从QTableWidget中删除该行,并在sqlite3中实时删除该行。
下面是一个示例代码,可以实现上述功能:
```python
import sqlite3
from PyQt5.QtWidgets import QApplication, QMenu, QTableWidget, QTableWidgetItem, QWidget
class TableWidget(QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.init_ui()
def init_ui(self):
self.setRowCount(5)
self.setColumnCount(3)
self.setHorizontalHeaderLabels(['姓名', '性别', '年龄'])
self.verticalHeader().setVisible(False)
for i in range(5):
self.setItem(i, 0, QTableWidgetItem('张三{}'.format(i)))
self.setItem(i, 1, QTableWidgetItem('男'))
self.setItem(i, 2, QTableWidgetItem('20'))
def contextMenuEvent(self, event):
menu = QMenu(self)
delete_action = menu.addAction("删除")
action = menu.exec_(self.mapToGlobal(event.pos()))
if action == delete_action:
row = self.currentRow()
self.removeRow(row)
self.delete_from_db(row)
def delete_from_db(self, row):
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("DELETE FROM `test` WHERE `id`=?", (row+1,))
conn.commit()
cursor.close()
conn.close()
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setGeometry(100, 100, 300, 250)
table_widget = TableWidget(self)
table_widget.setGeometry(10, 10, 280, 230)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
```
在该示例代码中,我们创建了一个QTableWidget,并在其中添加了5行3列的数据。在contextMenuEvent()函数中,我们创建了一个QMenu,并添加了一个“删除”菜单项。当用户右键单击某一行时,会弹出该菜单,并执行相应的操作。在删除操作中,我们获取了当前选中的行号,并从QTableWidget中删除该行,并在sqlite3中实时删除该行。
阅读全文