需求分析: 在做一個界面工具的時候, 由於需要用QTableWidget顯示查詢數據庫返回的內容, 但數據庫返回內容較多, QTableWidget沒有自帶分頁功能, 且界面一下顯示過多內容會出現卡頓, 所以自己實現一個分頁解決問題..
思路分析: 需要做兩個按鈕實現翻頁, 一個功能爲上一頁, 一個功能爲下一頁; 需要兩個標籤, 一個顯示當前頁數, 一個顯示總頁數. 爲實現複用, 可以把幾個控件封裝爲一個類.這個類有以下幾個功能:
1, 傳入兩個參數, 一個是數據總的長度, 一個是每一頁顯示的長度, 即將來的表格需要顯示多少條數據, 每一頁顯示幾行.
2, 兩個按鈕點擊後觸發兩個功能, 一個是刷新分頁導航欄的頁數顯示, 一個是刷新表格上的內容顯示.
具體實現與說明:
class IndexBar:
def __init__(self, parent):
self.index_bar = QWidget(parent)
self.index_bar.setFixedSize(130, 35)
self.layout = QHBoxLayout()
self.index_bar.setLayout(self.layout)
self.layout.addStretch()
self.btn_left = QPushButton('<<')
self.btn_left.setStyleSheet("QPushButton{border:0;font-size:16px}QPushButton::hover{background-color:green}")
self.layout.addWidget(self.btn_left)
self.label_page = QLabel('1')
self.label_page.setStyleSheet("font-size:14px;")
self.layout.addWidget(self.label_page)
self.btn_right = QPushButton('>>')
self.btn_right.setStyleSheet("QPushButton{border:0;font-size:16px}QPushButton::hover{background-color:green}")
self.layout.addWidget(self.btn_right)
self.layout.addStretch()
self.label_all = QLabel('共1頁')
self.label_all.setStyleSheet("font-size:14px;")
self.layout.addWidget(self.label_all)
self.current_page = 1
self.all_page = 1
self.lenth = 1
self.num = 1
def set_page_num(self, lenth, num):
self.lenth = lenth
self.num = num
if lenth % num == 0:
self.all_page = lenth // num
else:
self.all_page = lenth // num + 1
self.refresh_page_info()
def refresh_page_info(self):
self.label_all.setText('共' + str(self.all_page) + '頁')
self.label_page.setText(str(self.current_page))
def get_index(self, index):
if index < self.all_page:
return self.num * (index - 1), self.num * index - 1
elif index == self.all_page:
return self.num * (index - 1), self.lenth - 1
else:
return 0, 0
1, 顯示效果如下:
2, 首先定義需要的各個控件, 其中兩個翻頁按鍵通過QPushButton定義, 鼠標懸浮變爲綠色, 頁數顯示爲QLabel.
3, 定義方法, 根據數據總數和每一頁顯示數計算總頁數; 根據當前頁數判斷需要顯示數據的索引值, 即從第幾條到第幾條; 刷新界面顯示當前頁和總頁數的內容.
4, 還需要定義按鈕的連接方法來實現功能, 可以在需要實現分頁功能的位置設置, 然後分別實現相應的函數功能.
self.XXXXXXX.btn_left.clicked.connect(self.XXXXXX_left)
self.XXXXXXX.btn_right.clicked.connect(self.XXXXXX_right)
5, 功能擴展: 顯示可以繼續優化爲更好看的設計, 可以將頁數顯示改爲QLineEdit控件, 實現手動輸入頁數來跳轉到固定頁. 還可以加入直接跳轉到首頁尾頁功能, 還可以顯示爲兩邊數字中間省略號動態調整頁數.
6, 其它說明: 這只是一個簡單的示例, 也算是從無到有的一個過程, 在之後的應用中可以將其不斷優化.定義的class沒有直接繼承QWidget, 修改以下即可, 這一點需要注意, 實現的過程中代碼的防護等內容根據需要修改就可以了.