本文使用PyQt的版本为5.11.3,其他版本的兼容性测试 使用表格开发时,想加入一个页码选择操作的控件 有例子是利用滚动条,本文不涉及任何滚动条的利用。 UI界面与逻辑分离。 运行效果:
# _*_ coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
class TableWidget(QWidget):
control_signal = pyqtSignal(list)
def __init__(self, *args, **kwargs):
super(TableWidget, self).__init__(*args, **kwargs)
self.__init_ui()
def __init_ui(self):
style_sheet = """
QTableWidget {
border: none;
background-color:rgb(240,240,240)
}
QPushButton{
max-width: 18ex;
max-height: 6ex;
font-size: 11px;
}
QLineEdit{
max-width: 30px
}
"""
self.table = QTableWidget(3, 5) # 3 行 5 列的表格
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 自适应宽度
self.__layout = QVBoxLayout()
self.__layout.addWidget(self.table)
self.setLayout(self.__layout)
self.setStyleSheet(style_sheet)
def setPageController(self, page):
"""自定义页码控制器"""
control_layout = QHBoxLayout()
homePage = QPushButton("首页")
prePage = QPushButton("")
finalPage = QPushButton("尾页")
self.totalPage = QLabel("共" + str(page) + "页")
skipLable_0 = QLabel("跳到")
self.skipPage = QLineEdit()
skipLabel_1 = QLabel("页")
confirmSkip = QPushButton("确定")
homePage.clicked.connect(self.__home_page)
prePage.clicked.connect(self.__pre_page)
nextPage.clicked.connect(self.__next_page)
finalPage.clicked.connect(self.__final_page)
confirmSkip.clicked.connect(self.__confirm_skip)
control_layout.addStretch(1)
control_layout.addWidget(homePage)
control_layout.addWidget(prePage)
control_layout.addWidget(self.curPage)
control_layout.addWidget(nextPage)
control_layout.addWidget(finalPage)
control_layout.addWidget(self.totalPage)
control_layout.addWidget(skipLable_0)
control_layout.addWidget(self.skipPage)
control_layout.addWidget(skipLabel_1)
control_layout.addWidget(confirmSkip)
control_layout.addStretch(1)
self.__layout.addLayout(control_layout)
def __home_page(self):
"""点击首页信号"""
self.control_signal.emit(["home", self.curPage.text()])
def __pre_page(self):
"""点击上一页信号"""
self.control_signal.emit(["pre", self.curPage.text()])
def __next_page(self):
"""点击下一页信号"""
self.control_signal.emit(["next", self.curPage.text()])
def __final_page(self):
"""尾页点击信号"""
self.control_signal.emit(["final", self.curPage.text()])
def __confirm_skip(self):
"""跳转页码确定"""
self.control_signal.emit(["confirm", self.skipPage.text()])
def showTotalPage(self):
"""返回当前总页数"""
return int(self.totalPage.text()[1:-1])
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.__init_ui()
def __init_ui(self):
self.resize(500, 250)
self.setWindowTitle("QTableWidget加页码控制器")
self.table_widget = TableWidget() # 实例化表格
self.table_widget.setPageController(10) # 表格设置页码控制
self.table_widget.control_signal.connect(self.page_controller)
self.setCentralWidget(self.table_widget)
def page_controller(self, signal):
total_page = self.table_widget.showTotalPage()
if "home" == signal[0]:
self.table_widget.curPage.setText("1")
elif "pre" == signal[0]:
if 1 == int(signal[1]):
QMessageBox.information(self, "提示", "已经是第一页了", QMessageBox.Yes)
return
self.table_widget.curPage.setText(str(int(signal[1]) - 1))
elif "next" == signal[0]:
if total_page == int(signal[1]):
QMessageBox.information(self, "提示", "已经是最后一页了", QMessageBox.Yes)
return
self.table_widget.curPage.setText(str(int(signal[1]) + 1))
elif "final" == signal[0]:
self.table_widget.curPage.setText(str(total_page))
elif "confirm" == signal[0]:
if total_page |