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

python 如何抓取 PyQt的控件_表数据

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

python 如何抓取 PyQt的控件_python 如何抓取 PyQt的控件_02

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

python 如何抓取 PyQt的控件_Layout_03

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

python 如何抓取 PyQt的控件_控件_04

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

python 如何抓取 PyQt的控件_控件_05

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

python 如何抓取 PyQt的控件_表数据_06

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

python 如何抓取 PyQt的控件_Layout_07

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

python 如何抓取 PyQt的控件_Layout_08

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

python 如何抓取 PyQt的控件_表数据_09

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

python 如何抓取 PyQt的控件_python 如何抓取 PyQt的控件_10

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

python 如何抓取 PyQt的控件_控件_11

12单元格图文混排设置
'''
图文混排
new4=QTableWidgetItem(QIcon("./image/1.png"),"研究生")  #图文混排函数方法
'''
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class 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_())

python 如何抓取 PyQt的控件_表数据_12

13、改变单元格图片格式
'''
改变单元格中图片的大小尺寸
setIconSize(QSize(width,height))
'''
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class 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_())

python 如何抓取 PyQt的控件_python 如何抓取 PyQt的控件_13

14、单元格中弹出上下文菜单
'''
1、如何弹出菜单
2、如何在满足条件的情况下弹出菜单
QMenu.exec_方法
'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QObject,Qt
import sys

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

    def initUI(self):
        self.setWindowTitle("单元格中弹出上下文菜单")
        self.resize(500,300)

        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.tablewidget.setContextMenuPolicy(Qt.CustomContextMenu)
 #信号连接到槽函数
self.tablewidget.customContextMenuRequested.connect(self.generatemenu)
        self.setLayout(layout)

    def generatemenu(self,pos):
        print(pos)     #输出所单击鼠标右键的坐标值

 for i in self.tablewidget.selectionModel().selection().indexes():   #设置选中的单元格索引
 r=i.row()
 #如果选择的行索引小于2,则弹出上下文菜单
            if r<2:
                menu=QMenu()
                n1=menu.addAction("菜单项1")
                n2 = menu.addAction("菜单项2")
                n3 = menu.addAction("菜单项3")

                #设置菜单显示的坐标位置为相对于单元格的位置
                screenpos=self.tablewidget.mapToGlobal(pos)
                print(screenpos)

                #设置选择菜单满足的条件
a=menu.exec_(screenpos)
                if a==n1:
                    print("选择了第一个菜单项",self.tablewidget.item(r,0).text(),self.tablewidget.item(r, 1).text(),self.tablewidget.item(r,2).text()) #输出所在行各个单元格的内容
                elif a == n2:
                    print("选择了第二个菜单项", self.tablewidget.item(r, 0).text(), self.tablewidget.item(r, 1).text(),self.tablewidget.item(r, 2).text())
                elif a==n3:
                    print("选择了第三个菜单项",self.tablewidget.item(r,0).text(),self.tablewidget.item(r, 1).text(),self.tablewidget.item(r,2).text())
                else:
                    return

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