test.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import sys, math
  2. from typing import Any, List
  3. from PyQt5 import QtCore, QtWidgets
  4. # 分页listWidget控件,单选
  5. class PageListWidget(QtWidgets.QWidget):
  6. sinout_signal = QtCore.pyqtSignal(str)
  7. def __init__(self):
  8. super().__init__()
  9. self.init_data()
  10. self.init_ui()
  11. pass
  12. def init_data(self):
  13. self.ori_data_list: List[Any] = []
  14. self.single_page_count: int = 50
  15. self.total_page_count: int = 0
  16. self.total_row_count: int = 0
  17. self.current_page_number: int = 1
  18. pass
  19. def init_ui(self):
  20. pre_btn = QtWidgets.QPushButton('<<')
  21. pre_btn.clicked.connect(self.pre_btn_clicked)
  22. self.page_line = QtWidgets.QSpinBox()
  23. go_btn = QtWidgets.QPushButton('前往')
  24. go_btn.clicked.connect(self.go_btn_clicked)
  25. next_btn = QtWidgets.QPushButton('>>')
  26. next_btn.clicked.connect(self.next_btn_clicked)
  27. self.total_page_label = QtWidgets.QLabel('共0页')
  28. self.total_row_label = QtWidgets.QLabel('共0条')
  29. self.current_page_label = QtWidgets.QLabel('第1页')
  30. layout_top = QtWidgets.QHBoxLayout()
  31. layout_top.addWidget(pre_btn)
  32. layout_top.addWidget(self.page_line)
  33. layout_top.addWidget(go_btn)
  34. layout_top.addWidget(next_btn)
  35. layout_top.addWidget(self.total_page_label)
  36. layout_top.addWidget(self.total_row_label)
  37. layout_top.addWidget(self.current_page_label)
  38. layout_top.addStretch(1)
  39. self.content_list_widget = QtWidgets.QListWidget()
  40. self.content_list_widget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
  41. self.content_list_widget.itemClicked.connect(self.content_list_widget_itemClicked)
  42. layout = QtWidgets.QVBoxLayout()
  43. layout.addLayout(layout_top)
  44. layout.addWidget(self.content_list_widget)
  45. self.setLayout(layout)
  46. pass
  47. def first_set_data(self, data: List[Any]):
  48. self.ori_data_list = data
  49. self.total_row_count = len(data)
  50. self.total_page_count = math.ceil(self.total_row_count / self.single_page_count)
  51. self.current_page_number = 1
  52. self.page_line.setRange(1, self.total_page_count)
  53. self.total_row_label.setText(f" 共{self.total_row_count}条")
  54. self.total_page_label.setText(f" 共{self.total_page_count}页")
  55. self.change_page()
  56. pass
  57. def set_current_page_label(self):
  58. self.current_page_label.setText(f' 第{self.current_page_number}页')
  59. pass
  60. def change_page(self):
  61. start_dot = (self.current_page_number - 1) * self.single_page_count
  62. end_dot = start_dot + self.single_page_count
  63. current_data = self.ori_data_list[start_dot:end_dot]
  64. self.content_list_widget.clear()
  65. self.content_list_widget.addItems(current_data)
  66. self.set_current_page_label()
  67. pass
  68. def pre_btn_clicked(self):
  69. '''前一页点击'''
  70. if self.current_page_number <= 1:
  71. QtWidgets.QMessageBox.information(
  72. self,
  73. '提示',
  74. '已经是首页',
  75. QtWidgets.QMessageBox.Yes
  76. )
  77. return
  78. self.current_page_number -= 1
  79. self.change_page()
  80. pass
  81. def go_btn_clicked(self):
  82. '''前往按钮单击'''
  83. go_page = self.page_line.value()
  84. go_page_int = int(go_page)
  85. if go_page_int <= 0 or go_page_int > self.total_page_count:
  86. QtWidgets.QMessageBox.information(
  87. self,
  88. '提示',
  89. '输入的页码超出范围',
  90. QtWidgets.QMessageBox.Yes
  91. )
  92. return
  93. self.current_page_number = go_page
  94. self.change_page()
  95. pass
  96. def next_btn_clicked(self):
  97. '''下一页单击'''
  98. if self.current_page_number >= self.total_page_count:
  99. QtWidgets.QMessageBox.information(
  100. self,
  101. '提示',
  102. '已经在末页',
  103. QtWidgets.QMessageBox.Yes
  104. )
  105. return
  106. self.current_page_number += 1
  107. self.change_page()
  108. pass
  109. def content_list_widget_itemClicked(self, cur_item: QtWidgets.QListWidgetItem):
  110. cur_text = cur_item.text()
  111. self.sinout_signal.emit(cur_text)
  112. pass
  113. # 该方法用于接收单选事件发出的信息
  114. def show_selected_str(selected_str: str):
  115. print('当前选中:', selected_str)
  116. if __name__ == '__main__':
  117. with open('test.tst', 'r', encoding='utf-8') as fr:
  118. temp_list = fr.readlines()
  119. final_list = [item.strip() for item in temp_list]
  120. app = QtWidgets.QApplication(sys.argv)
  121. t_win = PageListWidget()
  122. t_win.sinout_signal.connect(show_selected_str)
  123. t_win.show()
  124. t_win.first_set_data(final_list)
  125. sys.exit(app.exec_())
  126. pass