PyQt5单元格操作大全

zhongfuyu 2020-02-12

1、显示二维列表数据(QTableView)控件
‘‘‘显示二维列表数据(QTableView)控件数据源model需要创建一个QTableView实例和一个数据源model,然后将其两者关联MVC模式 model viewer controller 前后端关联MVC的目的是将后端的数据和前端页面的耦合度降低‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtGui import *import sysclass 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_())

PyQt5单元格操作大全

2、显示一维列表数据‘‘‘显示列表数据控件QListView控件‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import QStringListModelimport sysclass 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_())

PyQt5单元格操作大全

3、扩展的表格控件QTableWidget控件
‘‘‘显示扩展的列表数据控件QTableWidget控件cell是指一个单元格QTableWidgetItem‘‘‘from PyQt5.QtWidgets import *import sysclass 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_())

PyQt5单元格操作大全

4、扩展的表格控件QListWidget控件
‘‘‘显示扩展的列表数据控件QListWidget控件‘‘‘from PyQt5.QtWidgets import *import sysclass 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_())

PyQt5单元格操作大全

5、设置单元格颜色和字体‘‘‘设置单元格颜色和颜色‘‘‘from PyQt5.QtWidgets import *from PyQt5 import QtCorefrom PyQt5.QtGui import QColor,QBrush,QFontimport sysclass 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_())

PyQt5单元格操作大全

6、设置单元格尺寸大小
‘‘‘设置改变单元格尺寸大小,以显示完整的文本内容‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtGui import QColor,QBrush,QFontimport sysclass 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_())

PyQt5单元格操作大全

7、单元格中放置控件setCellWidget控件
‘‘‘setCellWidget:单元格中放到控件使用setItem:将文本放置到单元格中去setStyleSheet:设置控件样式‘‘‘from PyQt5.QtWidgets import *import sysclass 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_())

PyQt5单元格操作大全

8、单元格中文本的对齐方式
from PyQt5.QtWidgets import *from PyQt5.QtCore import *import sysclass 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_())

PyQt5单元格操作大全

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

PyQt5单元格操作大全

10、合并单元格
‘‘‘合并单元格setSpan(row,column,要合并的行数,要合并的列数)‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *import sysclass 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_())

PyQt5单元格操作大全

11、单元格搜索
‘‘‘搜索单元格中的特定位置1、数据定位:findItems2、如果找到了符合条件的单元格,便定位到单元格所在的行:setSliderPosition‘‘‘from PyQt5.QtWidgets import *from PyQt5 import QtCorefrom PyQt5.QtGui import QColor,QBrushimport sysclass 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_())

PyQt5单元格操作大全

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_())

PyQt5单元格操作大全

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_())

PyQt5单元格操作大全

 

相关推荐

王磊的程序员之路 / 0评论 2020-06-26
lianback / 0评论 2020-05-19