Introducción a PyQt5 (13) Tablas y celdas (abajo)

Tabla de contenido

1. Establecer la alineación del texto de la celda

2. Combinar celdas

Tres. Establecer el tamaño de la celda

Cuatro. Darse cuenta del efecto de la mezcla de gráficos y texto en la celda.

Cinco. Cambiar el tamaño de la imagen en la celda

6. Muestra el menú contextual en la tabla.


1. Establecer la alineación del texto de la celda

setTextAlignment
Qt. AlignRight Alinear a la derecha Qt.AlignBottom Pantalla inferior

 

Código:

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


class CellTextAlignment(QWidget):
    def __init__(self):
        super(CellTextAlignment, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('设置单元格的文本对齐方式')
        self.resize(430, 230)

        layout = QHBoxLayout()
        #表格对象
        tableWidget=QTableWidget()
        #四行三列
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        #设置表格字段
        tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

        newItem=QTableWidgetItem('小明')
        #下面说的对齐与显示都是指在单元格中
        # 右对齐 底端显示,即右下,Qt.AlignRight默认是右上
        newItem.setTextAlignment(Qt.AlignRight | Qt.AlignBottom)
        tableWidget.setItem(0,0,newItem)
        #中心对齐,底部显示
        newItem = QTableWidgetItem('男')
        newItem.setTextAlignment(Qt.AlignCenter | Qt.AlignBottom)
        tableWidget.setItem(0, 1, newItem)
        newItem = QTableWidgetItem('190')
        newItem.setTextAlignment(Qt.AlignRight)
        tableWidget.setItem(0, 2, newItem)

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


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=CellTextAlignment()
    main.show()
    sys.exit(app.exec_())

resultado de la operación:

 

2. Combinar celdas

setSpan (fila, columna, el número de filas que se fusionarán, el número de columnas que se fusionarán)

 

Código:

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


class MergeCell(QWidget):
    def __init__(self):
        super(MergeCell, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('合并单元格')
        self.resize(430, 230)

        layout = QHBoxLayout()
        #表格对象
        tableWidget=QTableWidget()
        #四行三列
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        #设置表格字段
        tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

        newItem=QTableWidgetItem('小明')
        tableWidget.setItem(0,0,newItem)
        #setSpan(row, col, 要合并的行数,要合并的列数)
        tableWidget.setSpan(0,0,3,1)

        newItem = QTableWidgetItem('男')
        tableWidget.setItem(0, 1, newItem)
        tableWidget.setSpan(0, 1, 2, 1)

        newItem = QTableWidgetItem('190')
        tableWidget.setItem(0, 2, newItem)

        newItem=QTableWidgetItem('test')
        tableWidget.setItem(2,1,newItem)
        tableWidget.setSpan(2,1,1,2)

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


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=MergeCell()
    main.show()
    sys.exit(app.exec_())

resultado de la operación:

 

Tres. Establecer el tamaño de la celda

El tamaño de celda se puede arrastrar manualmente para cambiar el tamaño. Cuando la fuente se establece en un tamaño grande, el tamaño de celda que se muestra después de ejecutar puede no ser suficiente para mostrar el texto, y solo se mostrarán y omitirán tres puntos. En este momento , se debe establecer el tamaño de la celda.

Código:

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


class MergeCell(QWidget):
    def __init__(self):
        super(MergeCell, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('合并单元格')
        self.resize(600, 400)

        layout = QHBoxLayout()
        #表格对象
        tableWidget=QTableWidget()
        #四行三列
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        #设置表格字段
        tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

        newItem = QTableWidgetItem('小明')  # 单元格的数据项
        newItem.setFont(QFont('Times', 40, QFont.Black))  # 字体,字号,颜色
        newItem.setForeground(QBrush(QColor(255, 0, 0)))
        tableWidget.setItem(0, 0, newItem)

        newItem = QTableWidgetItem('女')
        newItem.setForeground(QBrush(QColor(255, 255, 0)))
        newItem.setBackground(QBrush(QColor(0, 0, 255)))  # rgb
        tableWidget.setItem(0, 1, newItem)

        newItem = QTableWidgetItem('100')
        newItem.setFont(QFont('Times', 60, QFont.Black))
        newItem.setForeground(QBrush(QColor(0, 0, 255)))
        tableWidget.setItem(0, 2, newItem)

        tableWidget.setRowHeight(0, 120)  # 设置第一行高度,三个数据项都在第一行上,第一行的单元格高度都变为120
        tableWidget.setColumnWidth(0, 150)  # 设置第一列宽度
        tableWidget.setRowHeight(2,200)#设置第三行高度,注意这是第三行,而不是第三个单元格的高度!!!!!
        tableWidget.setColumnWidth(2,180)# 设置第二列宽度

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


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=MergeCell()
    main.show()
    sys.exit(app.exec_())

resultado de la operación:

Después de cambiar el tamaño antes de     cambiar el tamaño

 

Cuatro. Darse cuenta del efecto de la mezcla de gráficos y texto en la celda.

Código:

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


class MergeCell(QWidget):
    def __init__(self):
        super(MergeCell, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('合并单元格')
        self.resize(600, 250)

        layout = QHBoxLayout()
        #表格对象
        tableWidget=QTableWidget()
        #四行四列
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(4)
        #设置表格字段
        tableWidget.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

        newItem=QTableWidgetItem('李宁')
        tableWidget.setItem(0,0,newItem)
        newItem = QTableWidgetItem('男')
        tableWidget.setItem(0, 1, newItem)
        newItem = QTableWidgetItem('160')
        tableWidget.setItem(0, 2, newItem)

        newItem=QTableWidgetItem(QIcon('../picture/LinuxLogo.jpg'),'背包')
        tableWidget.setItem(0,3,newItem)

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


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=MergeCell()
    main.show()
    sys.exit(app.exec_())

resultado de la operación:

 

Cinco. Cambiar el tamaño de la imagen en la celda

setIconSize (QSize (ancho, alto))

bicho:

Para las imágenes descargadas en línea, solo se puede mostrar una imagen png. Después de cambiar el lote a .jpg, la mayoría de ellas se pueden mostrar, pero todavía hay una que no se puede mostrar.

Haga clic aquí para modificar el sufijo del archivo en lotes en Windows

 

Código:

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


class CellImageSize(QWidget):
    def __init__(self):
        super(CellImageSize, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('改变单元格中图片尺寸')
        self.resize(1000, 900)

        layout = QHBoxLayout()
        #表格对象
        tableWidget=QTableWidget()
        #设置单元格中图片大小
        tableWidget.setIconSize(QSize(300,200))
        #五行三列
        tableWidget.setRowCount(5)
        tableWidget.setColumnCount(3)
        #设置表格字段
        tableWidget.setHorizontalHeaderLabels(['image1','image2','image3'])
        #让列的宽度和图片的宽度相同
        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.setIcon(QIcon('../picture/bag/bag%d.jpg' % (k+1)))
            tableWidget.setItem(i,j,item)

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


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=CellImageSize()
    main.show()
    sys.exit(app.exec_())

resultado de la operación:

 

6. Muestra el menú contextual en la tabla.

1. Cómo abrir el menú emergente
2. Si el menú emergente
QMenu. Exec_ () si se cumplen las condiciones

 

Código:

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


class CellImageSize(QWidget):
    def __init__(self):
        super(CellImageSize, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('在表格中显示上下文菜单')
        self.resize(500, 200)

        layout = QHBoxLayout()
        #表格对象
        self.tableWidget=QTableWidget()
        #五行三列
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(3)
        #设置表格字段
        self.tableWidget.setHorizontalHeaderLabels(['name','sex','weigh'])

        #添加数据
        newItem = QTableWidgetItem('小明')
        self.tableWidget.setItem(0, 0, newItem)
        newItem = QTableWidgetItem('男')
        self.tableWidget.setItem(0, 1, newItem)
        newItem = QTableWidgetItem('190')
        self.tableWidget.setItem(0, 2, newItem)

        newItem = QTableWidgetItem('小亮')
        self.tableWidget.setItem(1, 0, newItem)
        newItem = QTableWidgetItem('男')
        self.tableWidget.setItem(1, 1, newItem)
        newItem = QTableWidgetItem('100')
        self.tableWidget.setItem(1, 2, newItem)

        newItem = QTableWidgetItem('小红')
        self.tableWidget.setItem(2, 0, newItem)
        newItem = QTableWidgetItem('女')
        self.tableWidget.setItem(2, 1, newItem)
        newItem = QTableWidgetItem('90')
        self.tableWidget.setItem(2, 2, newItem)

        #设置允许弹出上下文你菜单
        self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        #信号与槽
        self.tableWidget.customContextMenuRequested.connect(self.generateMenu)

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

    def generateMenu(self,pos):
        print('pos=',pos)
        for i in self.tableWidget.selectionModel().selection().indexes():
            rowNum=i.row()
            print('选择了第%d行' % (rowNum+1))
        #如果选择的行索引小于2,弹出上下文菜单
        if rowNum<2:
            menu=QMenu()
            item1=menu.addAction('菜单项1')#一个动作
            #print(type(item1))
            item2 = menu.addAction('菜单项2')
            item3 = menu.addAction('菜单项3')
            #pos是相对于整个屏幕的坐标,所以要转换为窗口坐标
            screenPos=self.tableWidget.mapToGlobal(pos)
            print('screenPos=',screenPos)
            #被阻塞
            action=menu.exec_(screenPos)
            if action==item1:
                print('选择了第一个菜单项',self.tableWidget.item(rowNum,0).text(),
                      self.tableWidget.item(rowNum, 1).text(),
                      self.tableWidget.item(rowNum, 2).text())
            elif action==item2:
                print('选择了第二个菜单项',self.tableWidget.item(rowNum,0).text(),
                      self.tableWidget.item(rowNum, 1).text(),
                      self.tableWidget.item(rowNum, 2).text())
            elif action==item3:
                print('选择了第三个菜单项',self.tableWidget.item(rowNum,0).text(),
                      self.tableWidget.item(rowNum, 1).text(),
                      self.tableWidget.item(rowNum, 2).text())
            else:
                return


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=CellImageSize()
    main.show()
    sys.exit(app.exec_())

resultado de la operación:

Haga clic derecho en la celda y aparecerá el menú contextual      

 

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44593822/article/details/113552913
Recomendado
Clasificación