通过设置setSelectionMode(QAbstractItemView.MultiSelection),可以实现QWidgetList的多选。
但是上述结果不太符合我们需求。设置多选模式后,只需鼠标点击就可以选择多个条目。
我希望按下Ctrl键时才进行多选,仅鼠标单击的话,只进行单选。如何实现?
下面是样例,维护一个变量ori_multi_select,记录ctrl的按下状态
- class MainView(QMainWindow):
- def __init__(self):
- super().__init__()
- self.ui =u1.Ui_MainWindow()
- self.ui.setupUi(self)
-
- #==================初始化==================
- self.ui.ori_list.setSelectionMode(QAbstractItemView.MultiSelection)
- self.grabKeyboard()
-
- #==================变量==================
- self.ori_multi_select=True
-
- #==================信号与槽==================
- self.ui.ori_list.currentRowChanged.connect(self.change_selected) # 当鼠标选择某一行时触发
-
- def change_selected(self,index:int):
-
- print(f"选中行数:{index}\n信号触发")
- if index<0:
- return
- if not self.ori_multi_select: # 如果没有不处于多选模式(没有按住ctrl键)
- self.ui.ori_list.clearSelection() # 清除选择状态
-
-
-
- def keyPressEvent(self, event: QKeyEvent) -> None:
- # 如果按下ctrl键
- if event.key() == Qt.Key_Control:
- self.ori_multi_select = True # 进入多选模式
-
- def keyReleaseEvent(self, event: QKeyEvent) -> None:
- # 如果松开ctrl键
- if event.key() == Qt.Key_Control:
- self.ori_multi_select = False # 退出多选模式
-