PyQt5单元格操作大全

1、显示二维列表数据(QTableView)控件
‘‘‘显示二维列表数据(QTableView)控件数据源model需要创建一个QTableView实例和一个数据源model,然后将其两者关联

MVC模式 model viewer controller 前后端关联MVC的目的是将后端的数据和前端页面的耦合度降低

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

class tableview(QWidget):    def __init__(self):        super(tableview, self).__init__()        self.setWindowTitle("QTableView表格视图控件演示")        self.resize(600,500)

        self.model=QStandardItemModel(5,3) #创建一个标准的数据源model     self.model.setHorizontalHeaderLabels(["id","姓名","年龄"])  #设置表格的表头名称

        self.tableview=QTableView()        #关联model和tableview控件        self.tableview.setModel(self.model)

        #添加数据        #首先定义字符类数据        item11=QStandardItem("10")        item12=QStandardItem("雷神")        item13=QStandardItem("2000")        #其次将定义好的的数据添加到数据源model中        self.model.setItem(0,0,item11)        self.model.setItem(0,1,item12)        self.model.setItem(0,2,item13)

        layout=QVBoxLayout()        layout.addWidget(self.tableview)        self.setLayout(layout)

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

2、显示一维列表数据‘‘‘显示列表数据控件QListView控件‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import QStringListModelimport sys

class Listview(QWidget):    def __init__(self):        super(Listview,self).__init__()        self.setWindowTitle("QlistView列表展现控件演示")        self.resize(300,270)

        layout=QVBoxLayout()

        listview=QListView()        listmodel=QStringListModel()        self.list=["列表项1","列表项2","列表项3"]        listmodel.setStringList(self.list)

        listview.setModel(listmodel)

        listview.clicked.connect(self.click)        layout.addWidget(listview)

        self.setLayout(layout)

    def click(self,item):        QMessageBox.information(self,"QListView","您选择了"+self.list[item.row()])        print("hello world")

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

3、扩展的表格控件QTableWidget控件
‘‘‘显示扩展的列表数据控件QTableWidget控件cell是指一个单元格QTableWidgetItem‘‘‘from PyQt5.QtWidgets import *import sys

class Tablewidget(QWidget):    def __init__(self):        super(Tablewidget,self).__init__()        self.initUI()    def initUI(self):        self.setWindowTitle("QTableWidget扩展表格控件演示")        self.resize(430,230)

        #定义一个扩展的单元格控件        tablewidget=QTableWidget()

        # 设置表格的行和列数        tablewidget.setRowCount(4)        tablewidget.setColumnCount(3)

        layout = QVBoxLayout()        layout.addWidget(tablewidget)

        #设置表格控件的列表头名称        tablewidget.setHorizontalHeaderLabels(["姓名","年龄","籍贯"])        #定义单元格的内容        nameitem=QTableWidgetItem("小明")        tablewidget.setItem(0,0,nameitem)        ageitem=QTableWidgetItem("23")        tablewidget.setItem(0,1,ageitem)        jgitem=QTableWidgetItem("北京")        tablewidget.setItem(0,2,jgitem)

        #禁止编辑        tablewidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

        #整行显示        tablewidget.setSelectionBehavior(QAbstractItemView.SelectRows)        #整列显示        tablewidget.setSelectionBehavior(QAbstractItemView.SelectColumns)

        #自适应调整行和列的大小        tablewidget.resizeColumnsToContents()        tablewidget.resizeRowsToContents()

        #隐藏行和列的表头        #tablewidget.horizontalHeader().setVisible(False)        #tablewidget.verticalHeader().setVisible(False)

        #设置行的表头名称        tablewidget.setVerticalHeaderLabels(["a","B"])

        #隐藏表格线        tablewidget.setShowGrid(False)

        self.setLayout(layout)if __name__=="__main__":    app=QApplication(sys.argv)    p=Tablewidget()    p.show()    sys.exit(app.exec_())

4、扩展的表格控件QListWidget控件
‘‘‘显示扩展的列表数据控件QListWidget控件‘‘‘from PyQt5.QtWidgets import *import sys

class Listviewdemo(QMainWindow):    def __init__(self):        super(Listviewdemo,self).__init__()        self.setWindowTitle("QlistView列表展现控件演示")        self.resize(300,270)

        self.listwidget=QListWidget()        self.listwidget.resize(300,120)

        self.listwidget.addItem("item1")        self.listwidget.addItem("item2")        self.listwidget.addItem("item3")

        self.setCentralWidget(self.listwidget)        self.listwidget.itemClicked.connect(self.click)        #print(self.listwidget.item(self.listwidget.row()).text())

    def click(self,index):        QMessageBox.information(self,"QListWidget","您选择了"+self.listwidget.item(self.listwidget.row(Index)).text())

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

5、设置单元格颜色和字体‘‘‘设置单元格颜色和颜色‘‘‘from PyQt5.QtWidgets import *from PyQt5 import QtCorefrom PyQt5.QtGui import QColor,QBrush,QFontimport sys

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

    def initUI(self):        self.setWindowTitle("设置单元格字体和颜色")        self.resize(430,230)

        layout=QHBoxLayout()  #列布局        tablewidget=QTableWidget()        tablewidget.setRowCount(4)        tablewidget.setColumnCount(3)        layout.addWidget(tablewidget)

        tablewidget.setHorizontalHeaderLabels(["姓名","性别","体重"])

        name=QTableWidgetItem("雷神")        name.setFont(QFont("Times",14,QFont.Black))  #设置字体大小和样式        name.setForeground(QBrush(QColor(255,0,0)))  #设置字体的其他颜色        tablewidget.setItem(0,0,name)

        sex=QTableWidgetItem("女")        sex.setForeground(QBrush(QColor(255,255,0))) #设置字体颜色        sex.setBackground(QBrush(QColor(0,0,255)))  #设置字体的背景颜色        tablewidget.setItem(0,1,sex)

        weight=QTableWidgetItem("160")        weight.setFont(QFont("Airal",30))   #设置字体的大小和显示样式        weight.setForeground(QBrush(QColor(255,0,0)))        tablewidget.setItem(0,2,weight)

        self.setLayout(layout)

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

6、设置单元格尺寸大小
‘‘‘设置改变单元格尺寸大小,以显示完整的文本内容‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtGui import QColor,QBrush,QFontimport sys

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

    def initUI(self):        self.setWindowTitle("设置单元格尺寸")        self.resize(430,230)

        layout=QHBoxLayout()  #列布局        tablewidget=QTableWidget()        tablewidget.setRowCount(4)        tablewidget.setColumnCount(3)        layout.addWidget(tablewidget)

        tablewidget.setHorizontalHeaderLabels(["姓名","性别","体重"])

        #修改单元格的尺寸大小,通过改变行和列的尺寸即可实现        tablewidget.setRowHeight(0,100)   #该表第一行的高度        tablewidget.setColumnWidth(2,120)  #修改第2列的宽度        tablewidget.setRowHeight(2,100)

        name=QTableWidgetItem("雷神")        name.setFont(QFont("Times",30,QFont.Black))  #设置字体大小和样式        name.setForeground(QBrush(QColor(255,0,0)))  #设置字体的其他颜色        tablewidget.setItem(0,0,name)

        sex=QTableWidgetItem("女")        sex.setForeground(QBrush(QColor(255,255,0))) #设置字体颜色        sex.setBackground(QBrush(QColor(0,0,255)))  #设置字体的背景颜色        tablewidget.setItem(0,1,sex)

        weight=QTableWidgetItem("160")        weight.setFont(QFont("Airal",20))   #设置字体的大小和显示样式        weight.setForeground(QBrush(QColor(255,0,0)))        tablewidget.setItem(0,2,weight)

        self.setLayout(layout)

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

7、单元格中放置控件setCellWidget控件
‘‘‘setCellWidget:单元格中放到控件使用setItem:将文本放置到单元格中去setStyleSheet:设置控件样式‘‘‘from PyQt5.QtWidgets import *import sys

class placetool(QWidget):    def __init__(self):        super(placetool,self).__init__()        self.initUI()    def initUI(self):        self.setWindowTitle("在单元格中放置控件")        self.resize(430,300)        layout=QHBoxLayout() #水平布局        tablewidget=QTableWidget()        tablewidget.setRowCount(4)        tablewidget.setColumnCount(3)

        layout.addWidget(tablewidget)

        tablewidget.setHorizontalHeaderLabels(["姓名","性别","体重"])        #单元格中设置文本内容方法        textitem=QTableWidgetItem("小明")        tablewidget.setItem(0,0,textitem)        #单元格中放置下拉控件方法        combox=QComboBox()        combox.addItem("男")        combox.addItem("女")

        #单元格中设置下拉控件的样式        combox.setStyleSheet("QcomBox{margin:3px};")        tablewidget.setCellWidget(0,1,combox)

        modifybutton=QPushButton("修改")        modifybutton.setDown(True)        modifybutton.setStyleSheet(‘QPushButton{margin:3px};‘)        tablewidget.setCellWidget(0,2,modifybutton)

        self.setLayout(layout)

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

8、单元格中文本的对齐方式
from PyQt5.QtWidgets import *from PyQt5.QtCore import *import sys

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

    def initUI(self):        self.setWindowTitle("单元格按列排序")        self.resize(1000,500)

        layout=QHBoxLayout()  #列布局        self.tablewidget=QTableWidget()        self.tablewidget.setRowCount(4)        self.tablewidget.setColumnCount(3)        layout.addWidget(self.tablewidget)

        self.tablewidget.setHorizontalHeaderLabels(["省份","增加人数","患病累计人数"])

        new=QTableWidgetItem("北京")        new.setTextAlignment(Qt.AlignRight | Qt.AlignBottom)  #设置右对齐方式和底下对齐        self.tablewidget.setItem(0,0,new)        new1 = QTableWidgetItem("5")        new1.setTextAlignment(Qt.AlignCenter | Qt.AlignBottom) #设置中间对齐方式和底层对齐        self.tablewidget.setItem(0,1,new1)        new2= QTableWidgetItem("356")        new2.setTextAlignment(Qt.AlignLeft)  #设置左对齐方式和底下对齐        self.tablewidget.setItem(0,2,new2)        self.setLayout(layout)

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

9、设置单元格某一列排序
‘‘‘设置单元格某一列排序1.按哪一列进行排序2.排序的类型:升序或者降序sortItems(columnindex,orderType)函数方法‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *import sys

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

    def initUI(self):        self.setWindowTitle("单元格按列排序")        self.resize(1000,500)

        layout=QHBoxLayout()  #列布局        self.tablewidget=QTableWidget()        self.tablewidget.setRowCount(4)        self.tablewidget.setColumnCount(3)        layout.addWidget(self.tablewidget)

        self.tablewidget.setHorizontalHeaderLabels(["省份","增加人数","患病累计人数"])

        new=QTableWidgetItem("北京")        self.tablewidget.setItem(0,0,new)        new1 = QTableWidgetItem("5")        self.tablewidget.setItem(0,1,new1)        new2= QTableWidgetItem("356")        self.tablewidget.setItem(0,2,new2)

        new = QTableWidgetItem("甘肃")        self.tablewidget.setItem(1, 0, new)        new1 = QTableWidgetItem("3")        self.tablewidget.setItem(1,1, new1)        new2 = QTableWidgetItem("85")        self.tablewidget.setItem(1, 2, new2)

        new = QTableWidgetItem("湖北")        self.tablewidget.setItem(2, 0, new)        new1 = QTableWidgetItem("2061")        self.tablewidget.setItem(2, 1, new1)        new2 = QTableWidgetItem("31234")        self.tablewidget.setItem(2, 2, new2)

        self.button1=QPushButton("按日增排序")        self.button = QPushButton("按总数排序")        self.button1.clicked.connect(self.order)        self.button.clicked.connect(self.order)        layout.addWidget(self.button)        layout.addWidget(self.button1)        self.orderType=Qt.DescendingOrder  #设置默认的排序方式为降序        self.setLayout(layout)

    def order(self):        if self.orderType == Qt.DescendingOrder:            self.orderType=Qt.AscendingOrder #设置为升序        else:            self.orderType=Qt.DescendingOrder

        #单元格某一列排序函数方法设置        self.tablewidget.sortItems(2,self.orderType)

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

10、合并单元格
‘‘‘合并单元格setSpan(row,column,要合并的行数,要合并的列数)‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *import sys

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

    def initUI(self):        self.setWindowTitle("单元格按列排序")        self.resize(1000,500)

        layout=QHBoxLayout()  #列布局        self.tablewidget=QTableWidget()        self.tablewidget.setRowCount(4)        self.tablewidget.setColumnCount(3)        layout.addWidget(self.tablewidget)

        self.tablewidget.setHorizontalHeaderLabels(["省份","增加人数","患病累计人数"])

        new=QTableWidgetItem("北京")        self.tablewidget.setItem(0,0,new)

        new1 = QTableWidgetItem("5")        self.tablewidget.setItem(0,1,new1)

        new2= QTableWidgetItem("356")        self.tablewidget.setItem(0,2,new2)

        self.tablewidget.setSpan(0, 0, 3, 1)    self.tablewidget.setSpan(0, 1, 2, 1)   #合并单元格函数方法参数设置        self.setLayout(layout)

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

11、单元格搜索
‘‘‘搜索单元格中的特定位置1、数据定位:findItems2、如果找到了符合条件的单元格,便定位到单元格所在的行:setSliderPosition‘‘‘from PyQt5.QtWidgets import *from PyQt5 import QtCorefrom PyQt5.QtGui import QColor,QBrushimport sys

class Datalocation(QWidget):    def __init__(self):        super(Datalocation,self).__init__()        self.initUI()    def initUI(self):        self.setWindowTitle("单元格搜索定位")        self.resize(600,800)

        layout=QHBoxLayout()  #列布局        tablewidget=QTableWidget()        tablewidget.setRowCount(40)        tablewidget.setColumnCount(4)

        layout.addWidget(tablewidget)

        for i in range(40):            for j in range(4):                itemcontent="(%d,%d)" %(i,j)                tablewidget.setItem(i,j,QTableWidgetItem(itemcontent))        self.setLayout(layout)

        #搜索满足条件的cell        text="(13,1)"        items=tablewidget.findItems(text,QtCore.Qt.MatchExactly)  #搜索方式1        text1="(1"        items1 = tablewidget.findItems(text1, QtCore.Qt.MatchStartsWith)  #s搜索方式2        if len(items1)>0:            item=items1[0]            item.setBackground(QBrush(QColor(0,255,0)))  #设置背景色为绿色            item.setForeground(QBrush(QColor(255,0,0)))  #设置内容为红色

            row=item.row()            #定位到行            tablewidget.verticalScrollBar().setSliderPosition(row)

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

12单元格图文混排设置
‘‘‘图文混排new4=QTableWidgetItem(QIcon("./image/1.png"),"研究生")  #图文混排函数方法‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *import sysclass wordpicture(QWidget):    def __init__(self):        super(wordpicture,self).__init__()        self.initUI()

    def initUI(self):        self.setWindowTitle("图文混排")        self.resize(900,1000)

        layout=QHBoxLayout()  #列布局        self.tablewidget=QTableWidget()        self.tablewidget.setRowCount(3)        self.tablewidget.setColumnCount(4)        layout.addWidget(self.tablewidget)

        self.tablewidget.setHorizontalHeaderLabels(["姓明","性别","体重","图片"])

        new = QTableWidgetItem("燕江依")        self.tablewidget.setItem(0, 0, new)

        new1 = QTableWidgetItem("男")        self.tablewidget.setItem(0, 1, new1)

        new2 = QTableWidgetItem("55")        self.tablewidget.setItem(0, 2, new2)

        # 图文混排函数    new4=QTableWidgetItem(QIcon("./image/1.png"),"研究生")  #图文混排函数    self.tablewidget.setItem(0,3,new4)

        self.setLayout(layout)

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

13、改变单元格图片格式
‘‘‘改变单元格中图片的大小尺寸setIconSize(QSize(width,height))‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *import sysclass setpicture(QWidget):    def __init__(self):        super(setpicture,self).__init__()        self.initUI()

    def initUI(self):        self.setWindowTitle("改变单元格图片的大小")        self.resize(900,1000)

        layout=QHBoxLayout()  #列布局

        self.tablewidget=QTableWidget()        # 设置单元格中图片的尺寸为宽度300,高度200        self.tablewidget.setIconSize(QSize(300,200))

        self.tablewidget.setRowCount(5)        self.tablewidget.setColumnCount(3)        layout.addWidget(self.tablewidget)

        self.tablewidget.setHorizontalHeaderLabels(["图1","图2","图3"])        #让列的宽度和图片宽度相同        for i in range(3):            self.tablewidget.setColumnWidth(i,300)        # 让行的高度和图片高度相同        for j in range(15):            self.tablewidget.setRowHeight(j,200)        for k in range(15):            i=k/3   #行数            j=k%3   #列数            new = QTableWidgetItem()            new.setIcon(QIcon(‘./image/%d.png‘ % k))            self.tablewidget.setItem(i,j,new)

        self.setLayout(layout)

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



原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12297984.html

时间: 2024-09-30 10:49:39

PyQt5单元格操作大全的相关文章

对unidbgrid的单元格操作

一.使某行某列单元格disabled: 1. UniStringGrid -> Options -> goEditing = true 2. UniStringGrid -> ExtEvents -> add event beforeedit function beforeedit(editor, context, eOpts) {  var FixedRow, FixedCols;   FixedRow = 1;    FixedCols = 1;      if (editor

c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)

一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index       Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex); // 取得当前单元格的行 Index       Console.WriteLine(DataGridView1.CurrentCell.RowIndex); ******

Delphi DBGrid双击事件、单元格操作

1.得到当前格子中的内容: DBGrid1.Fields[DBGrid1.SelectedIndex].DisplayText; 把DBGrid1.SelectedIndex改为你所希望引用的字段就可以了,如第3个字段. DBGrid1.Fields[3].DisplayText; 2.双击单元格触发不同事件 procedure TMainFrm.DBGrid1DblClick(sender:TObject); begin if dbgrid1.fields[dbgrid1.selectedIn

读取excel,以字典格式输出。并对单元格操作

import jsonfrom openpyxl import load_workbook class DoExcel: def __init__(self,excel,sheet): self.excel=excel #excel名称 self.sheet=sheet #表单名称 def read(self): login_datas = [] wb=load_workbook(self.excel) #打开文件 sheet=wb[self.sheet] #定位表单 for i in rang

VBA单元格自适应高亮操作

1.单元格所在行和列高亮 第一种方式 Private Sub worksheet_selectionchange(ByVal target As Range) Cells.Interior.ColorIndex = xlColorIndexNone target.EntireRow.Interior.ColorIndex = 6 target.EntireColumn.Interior.ColorIndex = 50 End Sub 第二种方式 Private Sub worksheet_sel

JS动态生成表格后 合并单元格

JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单元格操作,在做之前也试着google下,但是网上没有碰到这方面的需求,所以自己写了一个简单的.用文字描述需求太费劲了,如下图所示: 1. 没有合并之前的图如下: 2. 合并之后的图如下: 如上所示:是根据相邻的编号相同 进行单元格合并. 先看看实现后的效果再聊吧! JSfiddle链接地址如下: 点

JS实现填报时对修改过的单元格进行标识

1. 描述 在填报预览时,对单元格编辑后,其左上角有个红色标记,但非常不明显,用户很难注意到.有没有什么好的办法,对单元格操作后,将其做较明显的特殊标记处理,方便用户识别呢? 如图所示:对单元格进行操作后,将其单元格进行背景色着色.文本加粗等标记. 2. 实现方法 打开模板 %FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\LineForm\LineForm.cpt 2.1 方法1:编辑结束后修改单元格样式 控件编辑后事件中修改单元格样式,选中需要设

118删除单元格(扩展知识:添加单元格和移动单元格的位置)

效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UITableViewController 4 @property (strong, nonatomic) NSMutableArray *mArrDataSource; 5 6 @end ViewController.m 1 #import "ViewController.h" 2 3 @interface Vi

apache poi 合并单元格 设置边框

HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); //创建一个样式 HSSFCellStyle styleBorderThin= wb.createCellStyle(); setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左