zoukankan      html  css  js  c++  java
  • PyQt5-高级控件使用(QTableWidget)

    QTableWidget是Qt中常用显示数据的表格,类似其他语言中的DataGrid; QTableWidget是QtableView的子类;每个单元格下是一个QTableWidgetItem对象;

    常用方法如下:

    表格编辑类型的枚举常量:

    单元格选中相关枚举类型:

    单元格内容对齐方式枚举类型:

    例如:

     1 #QTableWidget 控件使用
     2 from PyQt5.QtWidgets import  QTableView,QAbstractItemView,QHeaderView,QTableWidget, QTableWidgetItem, QMessageBox,QListWidget,QListWidgetItem, QStatusBar,  QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout,   QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel
     3 from PyQt5.QtGui import QIcon,QPixmap,QStandardItem,QStandardItemModel,QCursor
     4 from PyQt5.QtCore import QStringListModel,QAbstractListModel,QModelIndex,QSize,Qt
     5 import sys
     6 
     7 class WindowClass(QWidget):
     8 
     9     def __init__(self,parent=None):
    10 
    11         super(WindowClass, self).__init__(parent)
    12         self.layout=QHBoxLayout()
    13         self.resize(400,300)
    14         tableWidget=QTableWidget()
    15         tableWidget.setRowCount(4)#行数
    16         tableWidget.setColumnCount(4)#列数
    17         tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)#所有列自动拉伸,充满界面
    18         tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)  # 设置只能选中一行
    19         tableWidget.setEditTriggers(QTableView.NoEditTriggers)  # 不可编辑
    20         tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows);  # 设置只有行选中
    21         
    22         self.layout.addWidget(tableWidget)
    23         tableWidget.setHorizontalHeaderLabels(['姓名','地址','年龄','工资']) #横向标题排列,如果使用setVerticalHeaderLabels则是纵向排列标题
    24         items=[['JONES','Beijing','23',2300],['SMITH','SHAngHai','23','3000'],['ZY','Tianjin','23','2000'],['Smith','SJT','22','1030']]
    25         for i in range(len(items)):#注意上面列表中数字加单引号,否则下面不显示(或者下面str方法转化一下即可)
    26             item=items[i]
    27             for j in range(len(item)):
    28                  item = QTableWidgetItem(str(items[i][j]))
    29                  tableWidget.setItem(i,j,item)
    30         self.setLayout(self.layout)
    31 
    32 if __name__=="__main__":
    33     app=QApplication(sys.argv)
    34     win=WindowClass()
    35     win.show()
    36     sys.exit(app.exec_())

    以上部分方法是之间使用QTableView组件时使用过的;请注意;

    其他设置:

    1 tableWidget.horizontalHeader().setVisible(False)#设置列标题隐藏(针对列标题横向排列)
    2  #tableWidget.verticalHeader().setVisible(False)#设置列标题隐藏(针对列标题纵向排列)

    修改上面程序,项单元格中添加控件:

     1 #QTableWidget 控件使用
     2 from PyQt5.QtWidgets import  QComboBox,QTableView,QAbstractItemView,QHeaderView,QTableWidget, QTableWidgetItem, QMessageBox,QListWidget,QListWidgetItem, QStatusBar,  QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout,   QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel
     3 from PyQt5.QtGui import QIcon,QPixmap,QStandardItem,QStandardItemModel,QCursor,QFont,QBrush,QColor
     4 from PyQt5.QtCore import QStringListModel,QAbstractListModel,QModelIndex,QSize,Qt
     5 
     6 import sys
     7 
     8 
     9 class WindowClass(QWidget):
    10 
    11     def __init__(self,parent=None):
    12 
    13         super(WindowClass, self).__init__(parent)
    14         self.layout=QHBoxLayout()
    15         self.resize(400,300)
    16         tableWidget=QTableWidget()
    17         tableWidget.setRowCount(4)#行数
    18         tableWidget.setColumnCount(4)#列数
    19         tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)#所有列自动拉伸,充满界面
    20         tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)  # 设置只能选中一行
    21         tableWidget.setEditTriggers(QTableView.NoEditTriggers)  # 不可编辑
    22         tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows);  # 设置只有行选中, 整行选中
    23         tableWidget.resizeColumnsToContents()#设置列宽高按照内容自适应
    24         tableWidget.resizeRowsToContents()#设置行宽和高按照内容自适应
    25         #tableWidget.horizontalHeader().setVisible(False)#设置列标题隐藏(针对列标题横向排列)
    26         #tableWidget.verticalHeader().setVisible(False)#设置列标题隐藏(针对列标题纵向排列)
    27         self.layout.addWidget(tableWidget)
    28         tableWidget.setHorizontalHeaderLabels(['姓名','地址','年龄','操作']) #横向标题排列,如果使用setVerticalHeaderLabels则是纵向排列标题
    29         items=[['JONES','Beijing','23',''],['SMITH','SHAngHai','23',''],['ZY','Tianjin','23',''],['Smith','SJT','22','']]
    30         for i in range(len(items)):#注意上面列表中数字加单引号,否则下面不显示(或者下面str方法转化一下即可)
    31             item=items[i]
    32 
    33             for j in range(len(item)):
    34 #-----------------------------修改后程序,最后一列添加按钮-------------------#
    35                  if  j!=3:
    36                      item = QTableWidgetItem(str(items[i][j]))
    37                      tableWidget.setItem(i, j, item)
    38                  else: #最后一列添加控件
    39                      btn = QPushButton("删除")
    40                      btn.setDown(True)
    41                      btn.setStyleSheet("QPushButton{margin:3px};")
    42                      tableWidget.setCellWidget(i, j, btn)
    43 #--------------------------------------------------------------------------#
    44 
    45 #------------------------------0,1位置添加下拉列表框----------------------#
    46         #某个单元格设置为控件
    47         comBox=QComboBox()
    48         comBox.addItem("北京")
    49         comBox.addItems(["上海","天津"])
    50         comBox.setStyleSheet("QComboBox{margin:3px};")
    51         tableWidget.setCellWidget(0,1,comBox)
    52 #------------------------------------------------------------------------#
    53         #字体设置
    54         newItem=tableWidget.item(0,0)
    55         newItem.setFont(QFont("Times",12,QFont.Black))#字体样式加粗
    56         newItem.setForeground(QBrush(QColor(255,0,0)))#字体颜色
    57         #设置排序
    58         tableWidget.sortItems(1,Qt.AscendingOrder)#Qt.DescendingOrder 升序降序
    59         item_00=tableWidget.item(0,0)
    60         item_00.setTextAlignment(Qt.AlignRight)#Qt.AlignCenter ...
    61         #合并单元格
    62         tableWidget.setSpan(0,0,3,1)
    63         #单元格宽高设置
    64         tableWidget.setColumnWidth(0,150)#第一个参数为行下标
    65         tableWidget.setRowHeight(0,40)
    66         #设置不显示分割线
    67         tableWidget.setShowGrid(False)
    68 
    69         #单元格设置图片
    70         tableWidget.setItem(1,1,QTableWidgetItem(QIcon("./image/add.ico"),"百度"))
    71 
    72         tableWidget.setItem(0,0,newItem)
    73 
    74         self.setLayout(self.layout)
    75 
    76 if __name__=="__main__":
    77     app=QApplication(sys.argv)
    78     win=WindowClass()
    79     win.show()
    80     sys.exit(app.exec_())


    设置单元格图片:

     1 #QTableWidget 控件使用
     2 from PyQt5.QtWidgets import  QComboBox,QTableView,QAbstractItemView,QHeaderView,QTableWidget, QTableWidgetItem, QMessageBox,QListWidget,QListWidgetItem, QStatusBar,  QMenuBar,QMenu,QAction,QLineEdit,QStyle,QFormLayout,   QVBoxLayout,QWidget,QApplication ,QHBoxLayout, QPushButton,QMainWindow,QGridLayout,QLabel
     3 from PyQt5.QtGui import QIcon,QPixmap,QStandardItem,QStandardItemModel,QCursor,QFont,QBrush,QColor
     4 from PyQt5.QtCore import QStringListModel,QAbstractListModel,QModelIndex,QSize,Qt
     5 
     6 import sys
     7 class WindowClass(QWidget):
     8 
     9     def __init__(self,parent=None):
    10 
    11         super(WindowClass, self).__init__(parent)
    12         self.layout=QHBoxLayout()
    13         self.resize(400,300)
    14         tableWidget=QTableWidget()
    15         tableWidget.setRowCount(10)#行数
    16         tableWidget.setColumnCount(10)#列数
    17         tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)#所有列自动拉伸,充满界面
    18         tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)  # 设置只能选中一行
    19         tableWidget.setEditTriggers(QTableView.NoEditTriggers)  # 不可编辑
    20         tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems);  # 设置只能选中单元格
    21         tableWidget.resizeColumnsToContents()#设置列宽高按照内容自适应
    22         tableWidget.resizeRowsToContents()#设置行宽和高按照内容自适应
    23         #tableWidget.setHorizontalHeaderLabels(['','','','','','','','','',''])
    24 
    25         for i in range(10):
    26             tableWidget.setColumnWidth(i,20)
    27         for i in range(10):
    28             tableWidget.setRowHeight(i,20)
    29         for k in range(10):
    30             for m in range(10):
    31                 item=QTableWidgetItem()
    32                 item.setFlags(Qt.ItemIsEnabled)#点击图片选中单元格
    33                 icon=QIcon('./image/7.ico')
    34                 item.setIcon(icon)
    35 
    36                 tableWidget.setItem(k,m,item)
    37         tableWidget.itemClicked.connect(self.getItemsText)
    38         self.layout.addWidget(tableWidget)
    39         self.setLayout(self.layout)
    40     def getItemsText(self,item):
    41         print("获取内容:",item)#item.icon())
    42 
    43 if __name__=="__main__":
    44     app=QApplication(sys.argv)
    45     win=WindowClass()
    46     win.show()
    47     sys.exit(app.exec_())
  • 相关阅读:
    autorun.inf删除方法
    Re_Write序列号
    最常用的正则表达式
    SQL聚合使用GROUP BY
    Ext.Net的Window控件的简单使用
    SQL统计查询一个表中的记录,然后减法运算
    C#金额转换为汉字大写
    Ext.Net的Button按钮的使用
    C# 参考之方法参数关键字:params、ref及out 引用
    C#连接ACCESS 2007数据库
  • 原文地址:https://www.cnblogs.com/ygzhaof/p/10078114.html
Copyright © 2011-2022 走看看