1 #QListWidget 控件使用
2 from PyQt5.QtWidgets import QMessageBox,QListWidget,QListWidgetItem, QStatusBar, QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout, QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel
3 from PyQt5.QtGui import QIcon,QPixmap,QStandardItem,QStandardItemModel,QCursor
4 from PyQt5.QtCore import QStringListModel,QAbstractListModel,QModelIndex,QSize,Qt
5 import sys
7 class WindowClass(QWidget):
9 def __init__(self,parent=None):
10 self.f=""
11 super(WindowClass, self).__init__(parent)
12 self.layout=QVBoxLayout()
13 self.resize(400,300)
14 self.view=QListWidget()
15 #self.view.setViewMode(QListWidget.ListMode) #QListWidget.IconMode
17 self.view.setLineWidth(50)
18 self.view.addItems(["C","A","D","S"])
19 self.layout.addWidget(self.view)
20 self.setLayout(self.layout)
22 self.view.clicked.connect(self.check)#单击选中某一个选项
23 '''''
24 创建右键菜单
25 '''
26 # 必须将ContextMenuPolicy设置为Qt.CustomContextMenu
27 # 否则无法使用customContextMenuRequested信号
28 self.setContextMenuPolicy(Qt.CustomContextMenu)
31 # 创建QMenu
32 self.contextMenu = QMenu(self)
33 self.actionA = self.contextMenu.addAction(QIcon("images/0.png"), u'| 删除')
35 # 显示菜单
36 self.customContextMenuRequested.connect(self.showContextMenu)
38 #点击删除menu
39 self.contextMenu.triggered[QAction].connect(self.remove)
41 def check(self,index):
42 r=index.row()
43 self.f=r;
44 def showContextMenu(self):
45 #如果有选中项,则显示显示菜单
46 items=self.view.selectedIndexes()
47 if items:
48 self.contextMenu.show()
49 self.contextMenu.exec_(QCursor.pos()) # 在鼠标位置显示
50 def remove(self,qAction):
51 print(self.f)
52 #self.view.takeItem(self.f)#删除行(实际上是断开了与list的联系)
54 #注意:removeItemWidget(self, QListWidgetItem) # 移除一个Item,无返回值
55 #注意:takeItem(self, int) # 切断一个Item与List的联系,返回该Item
56 self.view.removeItemWidget(self.view.takeItem(self.f)) #删除
58 if __name__=="__main__":
59 app=QApplication(sys.argv)
60 win=WindowClass()
61 win.show()
62 sys.exit(app.exec_())