iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
Python

pythonGUI學習筆記系列 第 14

Day 14: Pyside6 列表(QListWidget) (二) 排序和常用功能

  • 分享至 

  • xImage
  •  

QListWidget 排序

  • sortItems(Qt.SortOrder) : 排序,有 Qt.SortOrder.DescendingOrder 降序和 Qt.SortOrder.AscendingOrder 升序。下面範例是使用升序,要注意雖然是數字,但型態是字串,所以他會用字典順序,也就是 ASCII 排序,比較第一個字。
from PySide6.QtWidgets import QApplication, QWidget, QListWidget, QVBoxLayout
from PySide6.QtCore import Qt

class Mywindow(QWidget):
    def __init__(self):
        super().__init__()

        QList = QListWidget()
        QList.addItems(["12", "57", "178","222"])
        QList.sortItems(Qt.SortOrder.AscendingOrder) #排序

        layout = QVBoxLayout()
        layout.addWidget(QList)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

升序

QListWidget 常用的功能

  • clear() : 清空列表。
  • currentItem() : 得到目前的元素,可以搭配 text() 顯示當前的字串等其他功能使用。下面範例是當選擇改變時,會觸發信號,然後顯示當前選擇的文字。
from PySide6.QtWidgets import QApplication, QWidget, QListWidget, QVBoxLayout , QListView

class Mywindow(QWidget):
    def __init__(self):
        super().__init__()

        QList = QListWidget()
        QList.addItems(["12", "57", "178","222"])
        QList.currentItemChanged.connect(lambda: print(QList.currentItem().text()))

        layout = QVBoxLayout()
        layout.addWidget(QList)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()
  • setText(str) : 設置文字。
  • setFlow(QListView.Flow) : 可以設定排列方法,要搭配要 QListView.Flow 使用,有 LeftToRight 左到右排列,或 TopToBottom 上到下排列。下面範例是左到右排列。
from PySide6.QtWidgets import QApplication, QWidget, QListWidget, QVBoxLayout , QListView

class Mywindow(QWidget):
    def __init__(self):
        super().__init__()

        QList = QListWidget()
        QList.addItems(["12", "57", "178","222"])
        QList.setFlow(QListView.Flow.LeftToRight)   #排列

        layout = QVBoxLayout()
        layout.addWidget(QList)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

https://ithelp.ithome.com.tw/upload/images/20240923/20169254iBgHWQjOeQ.png

配合菜單

  • 配合 QAction 做菜單。範例是當點擊滑鼠右鍵,可以點選刪除,然後刪除當前選取的元素。
from PySide6.QtWidgets import QApplication, QWidget, QListWidget, QVBoxLayout
from PySide6.QtCore import Qt
from PySide6.QtGui import QAction

class Mywindow(QWidget):
    def __init__(self):
        super().__init__()
        self.QList = QListWidget()
        self.QList.addItems(["apple pie", "apple", "banana"])

        # 創建上下文菜單的 QAction
        self.QList.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)  #設定菜單
        action = QAction("刪除", self)
        self.QList.addAction(action)
        action.triggered.connect(self.Delete)

        #布局
        layout = QVBoxLayout()
        layout.addWidget(self.QList)
        self.setLayout(layout)

    def Delete(self) :
        self.QList.takeItem(self.QList.currentRow())

if __name__ == "__main__":
    app = QApplication([])
    window = Mywindow()
    window.show()
    app.exec()

總結

  • QListWidget 排序
功能 方法
排序 sortItems(Qt.SortOrder)

有分成降序和升序。

功能 方法
降序 Qt.SortOrder.DescendingOrder
升序 Qt.SortOrder.AscendingOrder
  • QListWidget 常用的功能
功能 方法
清空列表 clear()
取得當前文字 text()
設置元素文字 setText(str)
目前的元素 currentItem()
排列方法 setFlow(QListView.Flow)

上一篇
Day 13: Pyside6 列表(QListWidget) (一) 增刪改查和信號
下一篇
Day 15: PySide6 表格(QTableWidget) (一) 增刪改查和信號
系列文
pythonGUI學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言