分頁控件效果圖
一、環境要求
python解釋器:python3.7.4
依賴:PyQt5、sys模塊
二、思路分析
1、布局:”上一頁“、”下一頁“等button、edit及label控件采用水平布局,使用該布局填充主控件QWidget
2、類繼承關系:主界面繼承自QWidget,然后把button、edit、label等控件作為成員變量,實現自定義的Widget
3、類接口分析:自定義的控件提供屬性接口,方便多種類對象之間的交互
三、代碼實現步驟
1、定義一個新的控件,繼承自QWidget
2、新控件界面的實現:使用QHBoxLayout容器,依次添加效果圖所示的控件(也就是QPushButton、QLabel、QLineEdit等),并設置這些控件的文本屬性
3、校驗:為當前頁數,總過頁數及跳轉頁數添加校驗(永遠不要相信用戶的輸入),當前頁數至少為1,且不能大于總的頁數,跳轉的頁數只能在1到總的頁數之間,且輸入框只能輸入整數
4、添加事件響應
四、代碼展示
from PyQt5.QtWidgets import (QWidget,QHBoxLayout,QPushButton,QLabel,QLineEdit,QApplication)
from PyQt5.Qt import QIntValidator
import sys
'''
1、提供數據翻頁顯示接口
'''
class PageController(QWidget):
def __init__(self):
super().__init__()
self._init_ui()
def _init_ui(self):
control_layout = QHBoxLayout()
self.prePage = QPushButton("
self.curPage = QLabel("1")
self.nextPage = QPushButton("下一頁>")
self.totalPage = QLabel("共 " + str(10) + " 頁")
skipLable_0 = QLabel("跳到")
self.skipPage = QLineEdit()
self.skipPage.setPlaceholderText("請輸入跳轉的頁碼")
self.skipPage.setValidator(QIntValidator()) ?# 設置只能輸入int類型的數據
skipLabel_1 = QLabel("頁")
self.confirmSkip = QPushButton("確定")
control_layout.addStretch(1)
control_layout.addWidget(self.prePage)
control_layout.addWidget(self.curPage)
control_layout.addWidget(self.nextPage)
control_layout.addWidget(self.totalPage)
control_layout.addWidget(skipLable_0)
control_layout.addWidget(self.skipPage)
control_layout.addWidget(skipLabel_1)
control_layout.addWidget(self.confirmSkip)
control_layout.addStretch(1)
self.setLayout(control_layout)
self.setWindowTitle("分頁控件demo")
self.prePage.clicked.connect(self.button_clicked)
self.nextPage.clicked.connect(self.button_clicked)
self.confirmSkip.clicked.connect(self.button_clicked)
def button_clicked(self):
button_text=self.sender().text()
total_page=int(self.totalPage.text().split()[1])
current_page=int(self.curPage.text())
if "
self.skipPage.setText('')
current_page=current_page-1
if current_page<=1:
self.curPage.setText('1')
else:
self.curPage.setText(str(current_page))
if "下一頁>"==button_text:
self.skipPage.setText('')
current_page=current_page+1
if current_page<=total_page:
self.curPage.setText(str(current_page))
if "確定"==button_text:
if ''==self.skipPage.text():
return
page=int(self.skipPage.text())
if 1<=page<=total_page:
self.curPage.setText(str(page))
if page>total_page:
self.curPage.setText(str(total_page))
self.skipPage.setText(str(total_page))
if page<=0:
self.curPage.setText(str(1))
self.skipPage.setText(str(1))
@property
def PAGE(self):
return int(self.totalPage.text().split()[1])
@PAGE.setter
def PAGE(self,page:int):
if page<0:
return
self.totalPage.setText("共 " + str(page) + " 頁")
if __name__=='__main__':
app=QApplication(sys.argv)
win=PageController()
win.show()
sys.exit(app.exec_())