凌的博客

您现在的位置是: 首页 > 学无止境 > python > 

python

python 实现表格(实例)

2020-02-29 python 1872
import sys
from PyQt5.QtWidgets import QWidget, QMainWindow, QApplication, QDesktopWidget, QHeaderView, QTableWidgetItem, QToolBar, \
    QHBoxLayout, QAction, QAbstractItemView, QTableView, QTableWidget, QPushButton
from PyQt5.QtGui import QIcon


class MainWin(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        toolbar = QToolBar()
        toolbar.addAction("创建配置文件")
        toolbar.addAction("测试规则")
        # toolbar.actionTriggered[QAction].connect(self.createConfig)

        self.addToolBar(toolbar)

        self.setWindowIcon(QIcon("logo.png"))
        # self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.setContentsMargins(0, 0, 0, 0)
        layout = QHBoxLayout()
        # self.setStyleSheet("background-color:#fff;")

        self.tableWidget = QTableWidget()

        # tableWidget.horizontalHeader().setVisible(False)#设置列标题隐藏(针对列标题横向排列)
        # tableWidget.verticalHeader().setVisible(False)#设置列标题隐藏(针对列标题纵向排列)
        self.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)  # 设置只能选中一行
        self.tableWidget.setEditTriggers(QTableView.NoEditTriggers)  # 不可编辑
        self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)  # 设置只有行选中

        self.tableWidget.resizeColumnsToContents()  # 设置列宽高按照内容自适应
        self.tableWidget.resizeRowsToContents()  # 设置行宽和高按照内容自适应
                #tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents) # 第一列 自适应
                #tableWidget.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeToContents) # 第二列 自适应
        self.initTable()
        layout.addWidget(self.tableWidget)

        # self.timer = QTimer()
        # self.timer.setInterval(1000)
        # self.timer.start()
        # self.timer.timeout.connect(self.initTable)

        wg = QWidget()
        wg.setLayout(layout)
        self.setCentralWidget(wg)

        self.setWindowTitle("网站管理")
        self.setGeometry(300, 300, 600, 300)
        self.center()

    def initTable(self):

        # print("init table")
        self.lists = {0: {"name": "test1", "path": "aaa", "total": "3", "index": 1}}

        self.tableWidget.setRowCount(len(self.lists))  # 行数
        self.tableWidget.setColumnCount(5)  # 列数

        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)  # 所有列自动拉伸,充满界面
        self.tableWidget.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeToContents)

        self.tableWidget.setHorizontalHeaderLabels(
            ['文件', '地址', '总章数', '更新章节', '操作'])  # 横向标题排列,如果使用setVerticalHeaderLabels则是纵向排列标题

        # items = [['JONES'],['JONES'],['JONES'],['JONES'],['JONES']]
        items = []
        for x in self.lists:
            items.append(
                [self.lists[x]["name"], self.lists[x]["path"], self.lists[x]["total"], self.lists[x]["index"], ])

        for i in range(len(items)):  # 注意上面列表中数字加单引号,否则下面不显示(或者下面str方法转化一下即可)
            item = items[i]
            for j in range(len(item)):
                item = QTableWidgetItem(str(items[i][j]))
                self.tableWidget.setItem(i, j, item)

        index = len(items[0])
        for i in range(len(items)):
            self.tableWidget.setCellWidget(i, index, self.buttonForRow(i))

    def buttonForRow(self, id):

        widget = QWidget()
        # 修改
        caijiBtn = QPushButton("采集")
        caijiBtn.setStyleSheet('''QPushButton{ text-align : center;width:50px;background-color : #4169E1;color:#fff;
                                                height : 30px;
                                                border-style: outset;
                                                font : 13px}
                                         QPushButton:hover{background-color:#0000CD}         
                                                  ''')
        caijiBtn.clicked.connect(lambda: self.caiji(id))

        openBtn = QPushButton("打开")
        openBtn.setStyleSheet('''QPushButton{ text-align : center;width:50px;background-color : #4169E1;color:#fff;
                                                height : 30px;
                                                border-style: outset;
                                                font : 13px}
                                         QPushButton:hover{background-color:#0000CD}         
                                                  ''')
        openBtn.clicked.connect(lambda: self.opendir(id))

        hLayout = QHBoxLayout()
        hLayout.addWidget(caijiBtn)
        hLayout.addWidget(openBtn)

        hLayout.setContentsMargins(5, 2, 5, 2)
        widget.setLayout(hLayout)
        return widget

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = MainWin()
    ex.show()
    sys.exit(app.exec_())


文章评论

0条评论