Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách sử dụng lớp QListWidget trong Python
Trong bài viết này, bạn sẽ tìm hiểu cách sử dụng lớp QListWidget
trong Python, một thành phần quan trọng của thư viện PyQt, để tạo ra một widget hiển thị danh sách các mục. QListWidget
cho phép bạn quản lý các mục danh sách dễ dàng với nhiều tính năng như thêm, xóa, chèn và xóa tất cả các mục chỉ bằng vài dòng mã. Qua các ví dụ cụ thể, bạn sẽ nắm vững cách thao tác với danh sách trong ứng dụng của mình, từ đó xây dựng các giao diện người dùng trực quan và tiện lợi hơn.
Giới thiệu về PyQt QListWidget
Lớp QListWidget
cho phép bạn tạo một widget hiển thị danh sách với một cột các mục. Các mục trong danh sách được đại diện bởi lớp QListWidgetItem
.
Lớp QListWidget
có nhiều phương thức hữu ích để thao tác với các mục trong danh sách, bao gồm:
addItems(iterable)
– thêm các mục vào danh sách từ một iterable chứa các chuỗi.addItem(QListWidgetItem)
– thêm một mục vào cuối danh sách.insertItem(row, QListWidgetItem)
– chèn một mục vào vị trí hàng được chỉ định.takeItem(row)
– xóa một mục khỏi hàng được chỉ định.clear()
– xóa và loại bỏ tất cả các mục trong danh sách.
Ví dụ về lớp PyQt QListWidget
Ví dụ sau sẽ minh họa cách thêm, chèn, xóa và xóa toàn bộ các mục từ một QListWidget
:
Bài viết này được đăng tại [free tuts .net]
import sys from PyQt6.QtWidgets import QInputDialog, QApplication, QWidget, QGridLayout, QListWidget, QPushButton from PyQt6.QtGui import QIcon class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('My Wish List') self.setWindowIcon(QIcon('./assets/wishlist.png')) self.setGeometry(100, 100, 400, 100) layout = QGridLayout(self) self.setLayout(layout) self.list_widget = QListWidget(self) self.list_widget.addItems(['Learn Python', 'Master PyQt']) layout.addWidget(self.list_widget, 0, 0, 4, 1) # Tạo các nút add_button = QPushButton('Add') add_button.clicked.connect(self.add) insert_button = QPushButton('Insert') insert_button.clicked.connect(self.insert) remove_button = QPushButton('Remove') remove_button.clicked.connect(self.remove) clear_button = QPushButton('Clear') clear_button.clicked.connect(self.clear) layout.addWidget(add_button, 0, 1) layout.addWidget(insert_button, 1, 1) layout.addWidget(remove_button, 2, 1) layout.addWidget(clear_button, 3, 1) # Hiển thị cửa sổ self.show() def add(self): text, ok = QInputDialog.getText(self, 'Add a New Wish', 'New Wish:') if ok and text: self.list_widget.addItem(text) def insert(self): text, ok = QInputDialog.getText(self, 'Insert a New Wish', 'New Wish:') if ok và text: current_row = self.list_widget.currentRow() self.list_widget.insertItem(current_row + 1, text) def remove(self): current_row = self.list_widget.currentRow() if current_row >= 0: current_item = self.list_widget.takeItem(current_row) del current_item def clear(self): self.list_widget.clear() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec())
Cách hoạt động
Đầu tiên, tạo một đối tượng QListWidget
:
self.list_widget = QListWidget(self)
Tiếp theo, thêm danh sách các mục vào danh sách:
self.list_widget.addItems(['Learn Python', 'Master PyQt'])
Tạo bốn nút Add
, Insert
, Remove
, và Clear
, sau đó kết nối tín hiệu clicked
của chúng với các phương thức tương ứng.
Định nghĩa phương thức add()
để lấy văn bản từ người dùng và thêm nó vào danh sách bằng phương thức addItem()
:
def add(self): text, ok = QInputDialog.getText(self, 'Add a New Wish', 'New Wish:') if ok và text: self.list_widget.addItem(text)
Phương thức QInputDialog.getText()
trả về một tuple gồm hai phần tử. Phần tử đầu tiên lưu trữ văn bản nhập vào, và phần tử thứ hai là giá trị boolean cho biết người dùng có nhấn nút OK hay không.
Nếu người dùng nhập văn bản và nhấn nút OK, văn bản sẽ được thêm vào danh sách bằng phương thức addItem()
của đối tượng QListWidget
.
Bạn cũng có thể tạo một đối tượng QListWidgetItem
và thêm nó vào danh sách thay vì chỉ dùng chuỗi. Ví dụ:
def add(self): text, ok = QInputDialog.getText(self, 'Add a New Wish', 'New Wish:') if ok và text: list_item = QListWidgetItem() list_item.setText(text) self.list_widget.addItem(list_item)
-
Đối tượng
QListWidgetItem
cung cấp thêm nhiều tính năng như đặt biểu tượng cho mục trong danh sách. -
Chèn một mục mới vào danh sách sau mục hiện tại đang được chọn:
def insert(self): text, ok = QInputDialog.getText(self, 'Insert a New Wish', 'New Wish:') if ok và text: current_row = self.list_widget.currentRow() self.list_widget.insertItem(current_row + 1, text)
-
Trong phương thức
insert()
, chúng ta sử dụng phương thứccurrentRow()
của đối tượngQListWidget
để lấy hàng hiện tại của mục đang được chọn, và dùng phương thứcinsertItem()
để chèn mục mới vào hàng kế tiếp. -
Định nghĩa phương thức
remove()
để xóa mục hiện tại đang được chọn khỏi danh sách:
def remove(self): current_row = self.list_widget.currentRow() if current_row >= 0: current_item = self.list_widget.takeItem(current_row) del current_item
-
Trong phương thức
remove()
, chúng ta sử dụng phương thứctakeItem()
của đối tượngQListWidget
để xóa mục. -
Định nghĩa phương thức
clear()
để xóa tất cả các mục khỏi danh sách:
def clear(self): self.list_widget.clear()
Phương thức clear()
của đối tượng QListWidget
sẽ xóa toàn bộ các mục trong danh sách.
Kết bài
Lớp QListWidget
cung cấp cho bạn một mạnh mẽ để hiển thị và quản lý các danh sách trong ứng dụng. Với các phương thức tiện lợi như thêm, xóa, chèn và xóa toàn bộ các mục, bạn có thể dễ dàng tùy chỉnh và thao tác với danh sách theo nhu cầu của mình. Bằng cách sử dụng QListWidget
, bạn sẽ cải thiện trải nghiệm người dùng và xây dựng những giao diện trực quan, linh hoạt trong các ứng dụng PyQt.