pyqt的QWidgetList如何多选?如何按下Ctrl多选?

 

 通过设置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 # 退出多选模式
        

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值