123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- import sys, math
- from typing import Any, List
- from PyQt5 import QtCore, QtWidgets
- # 分页listWidget控件,单选
- class PageListWidget(QtWidgets.QWidget):
- sinout_signal = QtCore.pyqtSignal(str)
- def __init__(self):
- super().__init__()
- self.init_data()
- self.init_ui()
- pass
- def init_data(self):
- self.ori_data_list: List[Any] = []
- self.single_page_count: int = 50
- self.total_page_count: int = 0
- self.total_row_count: int = 0
- self.current_page_number: int = 1
- pass
- def init_ui(self):
- pre_btn = QtWidgets.QPushButton('<<')
- pre_btn.clicked.connect(self.pre_btn_clicked)
- self.page_line = QtWidgets.QSpinBox()
- go_btn = QtWidgets.QPushButton('前往')
- go_btn.clicked.connect(self.go_btn_clicked)
- next_btn = QtWidgets.QPushButton('>>')
- next_btn.clicked.connect(self.next_btn_clicked)
- self.total_page_label = QtWidgets.QLabel('共0页')
- self.total_row_label = QtWidgets.QLabel('共0条')
- self.current_page_label = QtWidgets.QLabel('第1页')
- layout_top = QtWidgets.QHBoxLayout()
- layout_top.addWidget(pre_btn)
- layout_top.addWidget(self.page_line)
- layout_top.addWidget(go_btn)
- layout_top.addWidget(next_btn)
- layout_top.addWidget(self.total_page_label)
- layout_top.addWidget(self.total_row_label)
- layout_top.addWidget(self.current_page_label)
- layout_top.addStretch(1)
- self.content_list_widget = QtWidgets.QListWidget()
- self.content_list_widget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
- self.content_list_widget.itemClicked.connect(self.content_list_widget_itemClicked)
- layout = QtWidgets.QVBoxLayout()
- layout.addLayout(layout_top)
- layout.addWidget(self.content_list_widget)
- self.setLayout(layout)
- pass
- def first_set_data(self, data: List[Any]):
- self.ori_data_list = data
- self.total_row_count = len(data)
- self.total_page_count = math.ceil(self.total_row_count / self.single_page_count)
- self.current_page_number = 1
- self.page_line.setRange(1, self.total_page_count)
- self.total_row_label.setText(f" 共{self.total_row_count}条")
- self.total_page_label.setText(f" 共{self.total_page_count}页")
- self.change_page()
- pass
- def set_current_page_label(self):
- self.current_page_label.setText(f' 第{self.current_page_number}页')
- pass
- def change_page(self):
- start_dot = (self.current_page_number - 1) * self.single_page_count
- end_dot = start_dot + self.single_page_count
- current_data = self.ori_data_list[start_dot:end_dot]
- self.content_list_widget.clear()
- self.content_list_widget.addItems(current_data)
- self.set_current_page_label()
- pass
- def pre_btn_clicked(self):
- '''前一页点击'''
- if self.current_page_number <= 1:
- QtWidgets.QMessageBox.information(
- self,
- '提示',
- '已经是首页',
- QtWidgets.QMessageBox.Yes
- )
- return
- self.current_page_number -= 1
- self.change_page()
- pass
- def go_btn_clicked(self):
- '''前往按钮单击'''
- go_page = self.page_line.value()
- go_page_int = int(go_page)
- if go_page_int <= 0 or go_page_int > self.total_page_count:
- QtWidgets.QMessageBox.information(
- self,
- '提示',
- '输入的页码超出范围',
- QtWidgets.QMessageBox.Yes
- )
- return
- self.current_page_number = go_page
- self.change_page()
- pass
- def next_btn_clicked(self):
- '''下一页单击'''
- if self.current_page_number >= self.total_page_count:
- QtWidgets.QMessageBox.information(
- self,
- '提示',
- '已经在末页',
- QtWidgets.QMessageBox.Yes
- )
- return
- self.current_page_number += 1
- self.change_page()
- pass
- def content_list_widget_itemClicked(self, cur_item: QtWidgets.QListWidgetItem):
- cur_text = cur_item.text()
- self.sinout_signal.emit(cur_text)
- pass
- # 该方法用于接收单选事件发出的信息
- def show_selected_str(selected_str: str):
- print('当前选中:', selected_str)
- if __name__ == '__main__':
- with open('test.tst', 'r', encoding='utf-8') as fr:
- temp_list = fr.readlines()
- final_list = [item.strip() for item in temp_list]
- app = QtWidgets.QApplication(sys.argv)
- t_win = PageListWidget()
- t_win.sinout_signal.connect(show_selected_str)
- t_win.show()
- t_win.first_set_data(final_list)
- sys.exit(app.exec_())
- pass
|