PyQt5-高级控件使用(QTableWidget)

QTableWidget是Qt中常用显示数据的表格,类似其他语言中的DataGrid; QTableWidget是QtableView的子类;每个单元格下是一个QTableWidgetItem对象;

常用方法如下:
在这里插入图片描述
表格编辑类型的枚举常量:
在这里插入图片描述
单元格选中相关枚举类型:
在这里插入图片描述
单元格内容对齐方式枚举类型:
在这里插入图片描述
在这里插入图片描述
例如:

#QTableWidget 控件使用
from PyQt5.QtWidgets import  QTableView,QAbstractItemView,QHeaderView,QTableWidget, QTableWidgetItem, QMessageBox,QListWidget,QListWidgetItem, QStatusBar,  QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout,   QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel
from PyQt5.QtGui import QIcon,QPixmap,QStandardItem,QStandardItemModel,QCursor
from PyQt5.QtCore import QStringListModel,QAbstractListModel,QModelIndex,QSize,Qt
import sys

class WindowClass(QWidget):

    def __init__(self,parent=None):

        super(WindowClass, self).__init__(parent)
        self.layout=QHBoxLayout()
        self.resize(400,300)
        tableWidget=QTableWidget()
        tableWidget.setRowCount(4)#行数
        tableWidget.setColumnCount(4)#列数
        tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)#所有列自动拉伸,充满界面
        tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)  # 设置只能选中一行
        tableWidget.setEditTriggers(QTableView.NoEditTriggers)  # 不可编辑
        tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows);  # 设置只有行选中

        self.layout.addWidget(tableWidget)
        tableWidget.setHorizontalHeaderLabels(['姓名','地址','年龄','工资']) #横向标题排列,如果使用setVerticalHeaderLabels则是纵向排列标题
        items=[['JONES','Beijing','23',2300],['SMITH','SHAngHai','23','3000'],['ZY','Tianjin','23','2000'],['Smith','SJT','22','1030']]
        for i in range(len(items)):#注意上面列表中数字加单引号,否则下面不显示(或者下面str方法转化一下即可)
            item=items[i]
            for j in range(len(item)):
                 item = QTableWidgetItem(str(items[i][j]))
                 tableWidget.setItem(i,j,item)
        self.setLayout(self.layout)

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

以上部分方法是之间使用QTableView组件时使用过的;请注意;
在这里插入图片描述
其他设置:

tableWidget.horizontalHeader().setVisible(False)#设置列标题隐藏(针对列标题横向排列)
# tableWidget.verticalHeader().setVisible(False)#设置列标题隐藏(针对列标题纵向排列)

修改上面程序,向单元格中添加控件:

#QTableWidget 控件使用
from PyQt5.QtWidgets import  QComboBox,QTableView,QAbstractItemView,QHeaderView,QTableWidget, QTableWidgetItem, QMessageBox,QListWidget,QListWidgetItem, QStatusBar,  QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout,   QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel
from PyQt5.QtGui import QIcon,QPixmap,QStandardItem,QStandardItemModel,QCursor,QFont,QBrush,QColor
from PyQt5.QtCore import QStringListModel,QAbstractListModel,QModelIndex,QSize,Qt

import sys


class WindowClass(QWidget):

    def __init__(self,parent=None):

        super(WindowClass, self).__init__(parent)
        self.layout=QHBoxLayout()
        self.resize(400,300)
        tableWidget=QTableWidget()
        tableWidget.setRowCount(4)#行数
        tableWidget.setColumnCount(4)#列数
        tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)#所有列自动拉伸,充满界面
        tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)  # 设置只能选中一行
        tableWidget.setEditTriggers(QTableView.NoEditTriggers)  # 不可编辑
        tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows);  # 设置只有行选中, 整行选中
        tableWidget.resizeColumnsToContents()#设置列宽高按照内容自适应
        tableWidget.resizeRowsToContents()#设置行宽和高按照内容自适应
        #tableWidget.horizontalHeader().setVisible(False)#设置列标题隐藏(针对列标题横向排列)
        #tableWidget.verticalHeader().setVisible(False)#设置列标题隐藏(针对列标题纵向排列)
        self.layout.addWidget(tableWidget)
        tableWidget.setHorizontalHeaderLabels(['姓名','地址','年龄','操作']) #横向标题排列,如果使用setVerticalHeaderLabels则是纵向排列标题
        items=[['JONES','Beijing','23',''],['SMITH','SHAngHai','23',''],['ZY','Tianjin','23',''],['Smith','SJT','22','']]
        for i in range(len(items)):#注意上面列表中数字加单引号,否则下面不显示(或者下面str方法转化一下即可)
            item=items[i]

            for j in range(len(item)):
#-----------------------------修改后程序,最后一列添加按钮-------------------#
                 if  j!=3:
                     item = QTableWidgetItem(str(items[i][j]))
                     tableWidget.setItem(i, j, item)
                 else: #最后一列添加控件
                     btn = QPushButton("删除")
                     btn.setDown(True)
                     btn.setStyleSheet("QPushButton{margin:3px};")
                     tableWidget.setCellWidget(i, j, btn)
#--------------------------------------------------------------------------#

#------------------------------0,1位置添加下拉列表框----------------------#
        #某个单元格设置为控件
        comBox=QComboBox()
        comBox.addItem("北京")
        comBox.addItems(["上海","天津"])
        comBox.setStyleSheet("QComboBox{margin:3px};")
        tableWidget.setCellWidget(0,1,comBox)
#------------------------------------------------------------------------#
        #字体设置
        newItem=tableWidget.item(0,0)
        newItem.setFont(QFont("Times",12,QFont.Black))#字体样式加粗
        newItem.setForeground(QBrush(QColor(255,0,0)))#字体颜色
        #设置排序
        tableWidget.sortItems(1,Qt.AscendingOrder)#Qt.DescendingOrder 升序降序
        item_00=tableWidget.item(0,0)
        item_00.setTextAlignment(Qt.AlignRight)#Qt.AlignCenter ...
        #合并单元格
        tableWidget.setSpan(0,0,3,1)
        #单元格宽高设置
        tableWidget.setColumnWidth(0,150)#第一个参数为行下标
        tableWidget.setRowHeight(0,40)
        #设置不显示分割线
        tableWidget.setShowGrid(False)

        #单元格设置图片
        tableWidget.setItem(1,1,QTableWidgetItem(QIcon("./image/add.ico"),"百度"))

        tableWidget.setItem(0,0,newItem)

        self.setLayout(self.layout)

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

设置单元格图片:

#QTableWidget 控件使用
from PyQt5.QtWidgets import  QComboBox,QTableView,QAbstractItemView,QHeaderView,QTableWidget, QTableWidgetItem, QMessageBox,QListWidget,QListWidgetItem, QStatusBar,  QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout,   QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel
from PyQt5.QtGui import QIcon,QPixmap,QStandardItem,QStandardItemModel,QCursor,QFont,QBrush,QColor
from PyQt5.QtCore import QStringListModel,QAbstractListModel,QModelIndex,QSize,Qt

import sys
class WindowClass(QWidget):

    def __init__(self,parent=None):

        super(WindowClass, self).__init__(parent)
        self.layout=QHBoxLayout()
        self.resize(400,300)
        tableWidget=QTableWidget()
        tableWidget.setRowCount(10)#行数
        tableWidget.setColumnCount(10)#列数
        tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)#所有列自动拉伸,充满界面
        tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)  # 设置只能选中一行
        tableWidget.setEditTriggers(QTableView.NoEditTriggers)  # 不可编辑
        tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems);  # 设置只能选中单元格
        tableWidget.resizeColumnsToContents()#设置列宽高按照内容自适应
        tableWidget.resizeRowsToContents()#设置行宽和高按照内容自适应
        #tableWidget.setHorizontalHeaderLabels(['','','','','','','','','',''])

        for i in range(10):
            tableWidget.setColumnWidth(i,20)
        for i in range(10):
            tableWidget.setRowHeight(i,20)
        for k in range(10):
            for m in range(10):
                item=QTableWidgetItem()
                item.setFlags(Qt.ItemIsEnabled)#点击图片选中单元格
                icon=QIcon('./image/7.ico')
                item.setIcon(icon)

                tableWidget.setItem(k,m,item)
        tableWidget.itemClicked.connect(self.getItemsText)
        self.layout.addWidget(tableWidget)
        self.setLayout(self.layout)
    def getItemsText(self,item):
        print("获取内容:",item)#item.icon())

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

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值