zoukankan      html  css  js  c++  java
  • Qtablewidget操作,设置表头,填充内容,删除行,获取行内其它元素

    PyQt表格操作

    qtablewidget添加表头

    qtablewidget添加Button

    qtablewidget添加内容

    qtablewidget获取行内其它元素

    qtablewidget删除行

    代码示例

    UI文件:UI_main.py

    from PyQt4 import QtCore, QtGui
    
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
    
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
            MainWindow.resize(762, 512)
            self.centralWidget = QtGui.QWidget(MainWindow)
            self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
            self.gridLayout = QtGui.QGridLayout(self.centralWidget)
            self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
            self.tableWidget = QtGui.QTableWidget(self.centralWidget)
            self.tableWidget.setRowCount(10)
            self.tableWidget.setColumnCount(7)
            self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
            self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
            MainWindow.setCentralWidget(self.centralWidget)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
    

    业务代码文件:main.py

    # -*- coding: utf-8 -*-
    from PyQt4.QtGui import QMainWindow, QColor, QPushButton, QTableWidgetItem
    from PyQt4.QtCore import QTextCodec, Qt
    from Ui_main import Ui_MainWindow
    from PyQt4 import QtGui
    
    
    class MainWindow(QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
            QMainWindow.__init__(self, parent)
            # 加载UI
            self.setupUi(self)
            # 填充内容
            self.set_content()
    
        # 设置表头
        def set_table_header(self, header_list):
            """设置table表头"""
            self.tableWidget.clear()
            self.tableWidget.setColumnCount(len(header_list))
            self.tableWidget.setRowCount(20)
            # 表格展示
            self.tableWidget.setHorizontalHeaderLabels(header_list)
            # 设置最后一列自动拉伸
            self.tableWidget.horizontalHeader().setStretchLastSection(True)
            self.tableWidget.verticalHeader().setVisible(True)
            # 设置默认排序
            self.tableWidget.sortItems(0, Qt.AscendingOrder)
            # 设置表头颜色
            for x in range(self.tableWidget.columnCount()):
                headItem = self.tableWidget.horizontalHeaderItem(x)
                headItem.setTextColor(QColor(200, 111, 30))
                headItem.setBackgroundColor(QColor(200, 200, 200))
    
        def set_content(self):
            """填充数据"""
            data = [
                {'id': "1", 'desc': '第一条数据!'},
                {'id': "2", 'desc': '第二条数据!'},
                {'id': "3", 'desc': '第三条数据!'},
                {'id': "4", 'desc': '第四条数据!'}
            ]
            self.set_table_header(['删除', '启用', '禁用', 'id', '描述'])
            for row, i in enumerate(data):
                btn_del = QPushButton("删除")
                btn_del.id = i["id"]
                btn_del.clicked.connect(self.delete_slot)
    
                btn_inact = QPushButton("禁用")
                btn_inact.id = i["id"]
                btn_inact.clicked.connect(self.inactive_slot)
    
                btn_act = QPushButton("启用")
                btn_act.id = i["id"]
                btn_act.clicked.connect(self.active_slot)
    
                id_item = QTableWidgetItem(i["id"])
                btn_del.item = id_item
    
                self.tableWidget.setCellWidget(row, 0, btn_del)
                self.tableWidget.setCellWidget(row, 1, btn_inact)
                self.tableWidget.setCellWidget(row, 2, btn_act)
                self.tableWidget.setItem(row, 3, id_item)
                self.tableWidget.setItem(row, 4, QTableWidgetItem(i["desc"]))
    
        def delete_slot(self):
            sender = self.sender()
            # 删除行,关键点
            self.tableWidget.removeRow(self.tableWidget.row(sender.item))
    
        def inactive_slot(self):
            sender = self.sender()
            sender.setEnabled(False)
            for btn in self.tableWidget.findChildren(QPushButton):
                if btn.id == sender.id and btn.text() == "启用":
                    btn.setEnabled(True)
    
        def active_slot(self):
            sender = self.sender()
            sender.setEnabled(False)
            for btn in self.tableWidget.findChildren(QPushButton):
                if btn.id == sender.id and btn.text() == "禁用":
                    btn.setEnabled(True)
    
    
    if __name__ == "__main__":
        import sys
        reload(sys)
        sys.setdefaultencoding('utf-8')
        QTextCodec.setCodecForCStrings(QTextCodec.codecForName("utf-8"))
        app = QtGui.QApplication(sys.argv)
        ui = MainWindow()
        ui.show()
        sys.exit(app.exec_())
    
    
  • 相关阅读:
    python 第三方库大全
    windows CMD实现的信息收集工具
    ip协议是哪一层的协议
    MetaWeblog访问地址
    通过卸载程序触发恶意进程
    IP地址查询接口
    mysql 密码忘记解决办法
    查询IP地址的免费API
    showdan
    【译】android的审计和hacking工具
  • 原文地址:https://www.cnblogs.com/aloe-n/p/8721590.html
Copyright © 2011-2022 走看看