前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PySide6 GUI 编程(10):QListWidget的使用

PySide6 GUI 编程(10):QListWidget的使用

原创
作者头像
bowenerchen
发布2024-07-22 19:31:12
60
发布2024-07-22 19:31:12
举报
文章被收录于专栏:编码视界

基本使用

默认属性

代码语言:python
代码运行次数:0
复制
from PySide6.QtWidgets import QApplication, QListWidget, QMainWindow

def text_changed(i: str):
    print('text changed to: {}'.format(i))


class MyListWidget(QMainWindow):
    def __init__(self):
        super().__init__()

        my_list = QListWidget()
        my_list.addItems(['a', 'b', 'c', 'd', 'e'])

        my_list.currentTextChanged.connect(text_changed)
        print('default selection mode:', my_list.selectionMode())

        self.setCentralWidget(my_list)


if __name__ == '__main__':
    app = QApplication()
    ins = MyListWidget()
    ins.show()
    app.exec()

运行效果

默认的 Selection 模式
默认的 Selection 模式
静态 List 的 Selection 效果
静态 List 的 Selection 效果

不同Selection Mode下的效果

示例代码

代码语言:python
代码运行次数:0
复制
from PySide6.QtCore import QItemSelection
from PySide6.QtWidgets import QApplication, QComboBox, QListWidget, QMainWindow, QVBoxLayout, QWidget

selectionMap = {
    'SingleSelection': QListWidget.SelectionMode.SingleSelection,
    'NoSelection': QListWidget.SelectionMode.NoSelection,
    'ExtendedSelection': QListWidget.SelectionMode.ExtendedSelection,
    'ContiguousSelection': QListWidget.SelectionMode.ContiguousSelection,
    'MultiSelection': QListWidget.SelectionMode.MultiSelection,
}


class ListWidgetSelectionModes(QMainWindow):
    def __init__(self):
        super().__init__()

        my_combobox = QComboBox()
        my_combobox.addItems(list(selectionMap.keys()))
        my_combobox.setWindowTitle('ListWidget Selection Modes')
        my_combobox.setEditable(False)
        my_combobox.setMaxVisibleItems(len(list(selectionMap.keys())))
        my_combobox.setMaxCount(len(list(selectionMap.keys())))
        my_combobox.setDuplicatesEnabled(False)
        my_combobox.currentTextChanged.connect(self.change_list_selection_mode)

        self.my_list_widget = QListWidget()
        self.my_list_widget.addItems([chr(x) for x in range(ord('a'), ord('z') + 1)])
        self.my_list_widget.selectionModel().selectionChanged.connect(self.list_selection_changed)

        my_v_layout = QVBoxLayout()
        my_v_layout.addWidget(my_combobox)
        my_v_layout.addWidget(self.my_list_widget)

        container = QWidget()
        container.setLayout(my_v_layout)

        self.setCentralWidget(container)

    def change_list_selection_mode(self, selection_mode: str):
        self.my_list_widget.setSelectionMode(selectionMap[selection_mode])
        print('change selection mode to: {}'.format(selection_mode))

    def list_selection_changed(self, selected: QItemSelection, deselected: QItemSelection):
        selected_indexes = [index.row() for index in selected.indexes()]
        deselected_indexes = [index.row() for index in deselected.indexes()]
        print("Selected Items indexes:", selected_indexes,
              'Items data:', [x.text() for x in self.my_list_widget.selectedItems()],
              "Deselected items:", deselected_indexes)


if __name__ == '__main__':
    app = QApplication()
    ins = ListWidgetSelectionModes()
    ins.show()
    app.exec()

运行效果

NoSelection

NoSelectionMode
NoSelectionMode

SingleSelection

这种模式只允许选择单个项目。

SingleSelectionMode
SingleSelectionMode

ExtendedSelection

  • 用户可以通过单击或拖动鼠标来选择单个项目
  • 通过Command+单击来切换项目的选择状态
  • 通过Shift+单击来选择一系列项目
  • 或者通过Command+拖动鼠标来选择多个项目
ExtendedSelectionMode
ExtendedSelectionMode

ContiguousSelection

这种模式只允许用户选择一个连续的项目块。

ContiguousSelectionMode
ContiguousSelectionMode

MultiSelection

  • 用户可以通过单击或拖动鼠标来选择单个项目,
  • 通过Command+单击来切换项目的选择状态,
  • 或者通过Ctrl+拖动鼠标来选择多个项目
  • 然而,与ExtendedSelection不同的是,Shift+单击不会选择一系列项目,而只会选择从当前项目到新项目的项目。
MultiSelectionMode
MultiSelectionMode

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本使用
    • 默认属性
      • 运行效果
      • 不同Selection Mode下的效果
        • 示例代码
          • 运行效果
            • NoSelection
            • SingleSelection
            • ExtendedSelection
            • ContiguousSelection
            • MultiSelection
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档