PyQt5 QTableWidget

在这里插入图片描述

QTableWidget 示例1

演示QTableWidget控件的基本使用方法

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QTableWidgetItem, QHBoxLayout, QApplication, QAbstractItemView, QHeaderView)
from PyQt5.QtCore import Qt

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        self.setWindowTitle("QTableWidget Demo")
        self.resize(400, 300)
        conLayout = QHBoxLayout()
        tableWidget = QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        conLayout.addWidget(tableWidget)

        # 设置行标题
        tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])
        # 设置列标题
        tableWidget.setVerticalHeaderLabels(['行1','行2','行3','行4'])

        # 设置水平方向自适应伸缩模式
        tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        # 将行和列的宽度,高度设置为与所显示的内容的宽度,高度相匹配
        tableWidget.resizeColumnsToContents()
        tableWidget.resizeRowsToContents()

        # 隐藏表格的表头
        # tableWidget.horizontalHeader().setVisible(False)
        # tableWidget.verticalHeader().setVisible(False)
                
        # 设置编辑规则
        tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        # QAbstractItemView.NoEditTriggers
        # QAbstractItemView.CurrentChanged
        # QAbstractItemView.DoubleClicked
        # QAbstractItemView.SelectedClicked
        # QAbstractItemView.EditKeyPressed
        # QAbstractItemView.AnyKeyPressed
        # QAbstractItemView.AllEditTriggers

        # 设置选择行为
        tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems)
        # QAbstractItemView.SelectItems
        # QAbstractItemView.SelectRows
        # QAbstractItemView.SelectColumns


        # Qt.AlignLeft
        # Qt.AlignRight
        # Qt.AlignHCenter
        # Qt.AlignJustify

        # Qt.AlignTop
        # Qt.AlignBottom
        # Qt.AlignVCenter
        # Qt.AlignBaseline


        newItem = QTableWidgetItem("张三")    
        tableWidget.setItem(0, 0, newItem)
        newItem.setTextAlignment(Qt.AlignLeft)

        newItem = QTableWidgetItem("男")
        tableWidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem("160") 
        tableWidget.setItem(0, 2, newItem)

        self.setLayout(conLayout)

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

在这里插入图片描述

QTableWidget 示例2

添加控件类型条目

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

class MyTableWidget(QWidget):
    def __init__(self, parent=None):
        super(MyTableWidget, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QTableWidget Demo 2")
        self.resize(300, 200)

        layout = QHBoxLayout()
        tableWidget = QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        tableWidget.setHorizontalHeaderLabels(['一','二','三'])

        newItem = QTableWidgetItem("Java")
        tableWidget.setItem(0,0, newItem)
        
        comBox = QComboBox()
        comBox.addItem("男")
        comBox.addItem("女")
        comBox.setStyleSheet("QComboBox{margin:3px};")
        tableWidget.setCellWidget(0,1, comBox)

        modifyBtn = QPushButton("修改")
        modifyBtn.setStyleSheet("QPushButton{margin:3px};")
        tableWidget.setCellWidget(0, 2, modifyBtn)

        # item = tableWidget.findItems("Java", Qt.MatchExactly)
        # row = item[0].row()
        # tableWidget.verticalScrollBar().setSliderPosition(2)

        layout.addWidget(tableWidget)
        self.setLayout(layout)

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

在这里插入图片描述

QTableWidget 示例3

模拟通过鼠标滚轮快速定位到指定项

import sys

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QTableWidget Demo 3")
        self.resize(600, 800)

        conLayout = QHBoxLayout()
        tableWidget = QTableWidget()
        tableWidget.setRowCount(30)
        tableWidget.setColumnCount(4)
        conLayout.addWidget(tableWidget)

        for i in range(30):
            for j in range(4):
                itemContent = '(%d,%d)' % (i, j)
                tableWidget.setItem(i, j, QTableWidgetItem(itemContent))
        
        self.setLayout(conLayout)

        # 遍历表格查找对应项
        text = "(10,1)"
        items = tableWidget.findItems(text, Qt.MatchExactly)
        item = items[0]
        # 选中单元格
        #item.setSelected(True)
        # 设置字体为红色
        item.setForeground(QBrush(QColor(255, 0, 0)))

        row = item.row()
        # 模拟通过鼠标滚轮快速定位到指定项
        tableWidget.verticalScrollBar().setSliderPosition(row)
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Table()
    win.show()
    sys.exit(app.exec_())

在这里插入图片描述

QTableWidget 示例4

设置字体颜色,背景颜色,设置内容字体,排序,隐藏表格头等。

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QWidget Demo 3")
        layout = QHBoxLayout()
        tableWidget = QTableWidget()

        tableWidget.setRowCount(10)
        tableWidget.setColumnCount(3)
        tableWidget.setRowHeight(0, 100)
        tableWidget.setColumnWidth(0, 50)
        tableWidget.setShowGrid(False)
        tableWidget.verticalHeader().setVisible(False)
            
        
        # 设置 前景,背景颜色
        newItem = QTableWidgetItem("张三")
        newItem.setForeground(QBrush(QColor(255, 0, 0)))
        newItem.setBackground(QBrush(QColor(0, 255, 0)))
        tableWidget.setItem(0, 0, newItem)

        # 设置字体
        newItem = QTableWidgetItem("男")
        newItem.setFont(QFont("Times", 16, QFont.Black))
        tableWidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem("160")
        newItem.setFont(QFont("times", 12, QFont.Bold))
        tableWidget.setItem(0, 2, newItem)

        # Qt.DescendingOrder 降序
        # Qt.AscendingOrder 升序

        newItem = QTableWidgetItem("李四")
        tableWidget.setItem(1,0, newItem)

        newItem = QTableWidgetItem("男")
        tableWidget.setItem(1, 1, newItem)

        newItem = QTableWidgetItem("172")
        tableWidget.setItem(1, 2, newItem)

        newItem = QTableWidgetItem("小红")
        tableWidget.setItem(2, 0, newItem)

        newItem = QTableWidgetItem("女")
        tableWidget.setItem(2, 1, newItem)
        
        newItem = QTableWidgetItem("150")
        tableWidget.setItem(2, 2, newItem)

        # 第3列 按升序排序
        tableWidget.sortItems(2, Qt.DescendingOrder)

        layout.addWidget(tableWidget)
        self.setLayout(layout)

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

在这里插入图片描述

QTableWidget 示例5

表格显示图标

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt

# 新手

class Table(QWidget):
    def __init__(self, parent=None):
        super(Table, self).__init__(parent)
        self.setWindowTitle("QWidget 显示图片")
        self.initUI()
        
    def initUI(self):
        layout = QHBoxLayout()

        tableWidget = QTableWidget()
        tableWidget.setColumnCount(3)
        tableWidget.setRowCount(5)

        tableWidget.setHorizontalHeaderLabels(['图片1', '图片2', '图片3'])
        tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        tableWidget.setIconSize(QSize(300, 200))
        
        
        for i in range(3): # 让列宽和图片相同
            tableWidget.setColumnWidth(i, 300)
        for i in range(5):
            tableWidget.setRowHeight(i, 200)

        
        for k in range(15):
            i = k/3
            j = k%3
            item = QTableWidgetItem()
            item.setFlags(Qt.ItemIsEnabled) # 用户点击表格时,图片被选中
            icon = QIcon(r'D:\project\python\pyqt5\advance_high\images\bao%d.png' % k)
            # icon = QIcon(r'D:\project\python\pyqt5\advance_high\images\bao0.png')
            item.setIcon(QIcon(icon))
            tableWidget.setItem(i, j, item)
    
        tableWidget.itemClicked.connect(self.handleItemClick)

        layout.addWidget(tableWidget)
        self.setLayout(layout)

    def handleItemClick(self, item):
        print('you selected => ', item.row(), item.column())

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

在这里插入图片描述

QTableWidget 示例6

支持右键弹窗菜单

import sys
from PyQt5.QtWidgets import (QMenu, QPushButton, QWidget, QTableWidget, QTableWidgetItem,
    QHBoxLayout, QApplication, QDesktopWidget, QHeaderView)
from PyQt5.QtCore import pyqtSignal, QObject, pyqtSlot
from PyQt5.QtCore import Qt

# 支持右键弹窗菜单

class Table(QWidget):
    def __init__(self, parent=None):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QTableWidget Demo 6")
        self.resize(500, 300)
        conLayout = QHBoxLayout()

        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(5)
        self.tableWidget.setColumnCount(3)
        conLayout.addWidget(self.tableWidget)

        self.tableWidget.setHorizontalHeaderLabels(['姓名', '性别', '体重'])
        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        newItem = QTableWidgetItem("张三")
        self.tableWidget.setItem(0, 0, newItem)

        newItem = QTableWidgetItem("男")
        self.tableWidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem("160")
        self.tableWidget.setItem(0, 2, newItem)

        newItem = QTableWidgetItem("李四")
        self.tableWidget.setItem(1, 0, newItem)

        newItem = QTableWidgetItem("女")
        self.tableWidget.setItem(1, 1, newItem)

        newItem = QTableWidgetItem("170")
        self.tableWidget.setItem(1, 2, newItem)

        # 允许右键产生菜单
        self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        #将右键菜单绑定到槽函数generateMenu
        self.tableWidget.customContextMenuRequested.connect(self.generateMenu)
        self.setLayout(conLayout)


    def generateMenu(self, pos):
        row_num = -1
        for i in self.tableWidget.selectionModel().selection().indexes():
            row_num = i.row()
        
        # 表格中只有两条有效数据,所以只在前两行支持右键弹出菜单
        if row_num < 2:
            menu = QMenu()
            item1 = menu.addAction(u"选项一")
            item2 = menu.addAction(u"选项二")
            item3 = menu.addAction(u"选项三")
            action = menu.exec(self.tableWidget.mapToGlobal(pos))
            if action == item1:
                print('第一项', self.tableWidget.item(row_num, 0).text(), self.tableWidget.item(row_num, 1).text(), self.tableWidget.item(row_num, 2).text())
            elif action == item2:
                print("第二项", self.tableWidget.item(row_num, 0).text(), self.tableWidget.item(row_num, 1).text(), self.tableWidget.item(row_num, 2).text())
            elif action == item3:
                print("第三项", self.tableWidget.item(row_num, 0).text(), self.tableWidget.item(row_num, 1).text(), self.tableWidget.item(row_num, 2).text())
            else:
                return


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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongYuLong的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值