亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PyQt5中QTableWidget界面控件怎么用

發布時間:2021-06-18 09:16:36 來源:億速云 閱讀:186 作者:小新 欄目:開發技術

小編給大家分享一下PyQt5中QTableWidget界面控件怎么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

前言

QTableWidget是Qt程序中常用的顯示數據表格的控件,類似于c#中的DataGrid。QTableWidget是QTableView的子類,它使用標準的數據模型,并且其單元數據是通過QTableWidgetItem對象來實現的,使用QTableWidget時就需要QTableWidgetItem。用來表示表格中的一個單元格,整個表格就是用各個單元格構建起來的

QTableWidget類中的常用方法

方法描述
setROwCount(int row)設置QTableWidget表格控件的行數
setColumnCount(int col)設置QTableWidget表格控件的列數
setHorizontalHeaderLabels()設置QTableWidget表格控件的水平標簽
setVerticalHeaderLabels()設置QTableWidget表格控件的垂直標簽
setItem(int ,int ,QTableWidgetItem)在QTableWidget表格控件的每個選項的單元控件內添加控件
horizontalHeader()獲得QTableWidget表格控件的表格頭,以便執行隱藏
rowCount()獲得QTableWidget表格控件的行數
columnCount()獲得QTableWidget表格控件的列數
setEditTriggers(EditTriggers triggers)設置表格是否可以編輯,設置表格的枚舉值
setSelectionBehavior設置表格的選擇行為
setTextAlignment()設置單元格內文本的對齊方式
setSpan(int row,int column,int rowSpanCount,int columnSpanCount)合并單元格,要改變單元格的第row行,column列,要合并rowSpancount行數和columnSpanCount列數

row:要改變的行數

column:要改變的列數

rowSpanCount:需要合并的行數

columnSpanCount:需要合并的列數
setShowGrid()在默認情況下表格的顯示是有網格的,可以設置True或False用于是否顯示,默認True
setColumnWidth(int column,int width)設置單元格行的寬度
setRowHeight(int row,int height)設置單元格列的高度

編輯規則的枚舉值類型

選項描述
QAbstractItemView.NoEditTriggers0No0不能對表格內容進行修改
QAbstractItemView.CurrentChanged1Editing1任何時候都能對單元格進行修改
QAbstractItemView.DoubleClicked2Editing2雙擊單元格
QAbstractItemView.SelectedClicked4Editing4單擊已經選中的內容
QAbstractItemView.EditKeyPressed8Editing8當修改鍵按下時修改單元格
QAbstractItemView.AnyKeyPressed16Editing16按任意鍵修改單元格
QAbstractItemView.AllEditTriggers31Editing31包括以上所有條件

表格選擇行為的枚舉值

選擇描述
QAbstractItemView.SelectItems0Selecting0選中單個單元格
QAbstractItemView.SelectRows1Selecting1選中一行
QAbstractItemView.SelectColumns2Selecting2選中一列

單元格文本水平對齊方式

選項描述
Qt.AlignLeft將單元格內的內容沿單元格的左邊緣對齊
Qt.AlignRight將單元格內的內容沿單元格的右邊緣對齊
Qt.AlignHCenter在可用空間中,居中顯示在水平方向上
Qt.AlignJustify將文本在可用空間內對齊,默認從左到右

單元格文本垂直對齊方式

選項描述
Qt.AlignTop與頂部對齊
Qt.AlignBottom與底部對齊
Qt.AlignVCenter在可用空間中,居中顯示在垂直方向上
Qt.AlignBaseline與基線對齊

如果要設置水平和垂直方向對齊方式,比如在表格空間內上下,左右居中對齊,那么只要使用Qt,AlignHCenter和Qt,AlignVCenter即可

實例:QTableWidget的基本用法

import sys
from PyQt5.QtWidgets import *

class Table(QWidget):
 def __init__(self):
  super(Table, self).__init__()
  self.initUI()
 def initUI(self):
  self.setWindowTitle("QTableWidget例子")
  self.resize(400,300)
  layout=QHBoxLayout()

  #實現的效果是一樣的,四行三列,所以要靈活運用函數,這里只是示范一下如何單獨設置行列
  TableWidget=QTableWidget(4,3)

  # TableWidget = QTableWidget()
  # TableWidget.setRowCount(4)
  # TableWidget.setColumnCount(3)



  #設置水平方向的表頭標簽與垂直方向上的表頭標簽,注意必須在初始化行列之后進行,否則,沒有效果
  TableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])
  #Todo 優化1 設置垂直方向的表頭標簽
  #TableWidget.setVerticalHeaderLabels(['行1', '行2', '行3', '行4'])

  #TODO 優化 2 設置水平方向表格為自適應的伸縮模式
  ##TableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

  #TODO 優化3 將表格變為禁止編輯
  #TableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

  #TODO 優化 4 設置表格整行選中
  #TableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

  #TODO 優化 5 將行與列的高度設置為所顯示的內容的寬度高度匹配
  #QTableWidget.resizeColumnsToContents(TableWidget)
  #QTableWidget.resizeRowsToContents(TableWidget)

  #TODO 優化 6 表格頭的顯示與隱藏
  #TableWidget.verticalHeader().setVisible(False)
  #TableWidget.horizontalHeader().setVisible(False)

  #TOdo 優化7 在單元格內放置控件
  # comBox=QComboBox()
  # comBox.addItems(['男','女'])
  # comBox.addItem('未知')
  # comBox.setStyleSheet('QComboBox{margin:3px}')
  # TableWidget.setCellWidget(0,1,comBox)
  #
  # searchBtn=QPushButton('修改')
  # searchBtn.setDown(True)
  # searchBtn.setStyleSheet('QPushButton{margin:3px}')
  # TableWidget.setCellWidget(0,2,searchBtn)


  #添加數據
  newItem=QTableWidgetItem('張三')
  TableWidget.setItem(0,0,newItem)

  newItem=QTableWidgetItem('男')
  TableWidget.setItem(0,1,newItem)

  newItem=QTableWidgetItem('160')
  TableWidget.setItem(0,2,newItem)

  layout.addWidget(TableWidget)

  self.setLayout(layout)
if __name__ == '__main__':
 app=QApplication(sys.argv)
 win=Table()
 win.show()
 sys.exit(app.exec_())

初始運行程序,顯示效果如下

PyQt5中QTableWidget界面控件怎么用

代碼分析

構造一個QTableWidget對象,設置表格為4行3列

TableWidget=QTableWidget(4,3)

設置表格頭

TableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])

生成一個QTableWidgetItem對象,并添加到表格的0行0列處

 newItem=QTableWidgetItem('張三')
 TableWidget.setItem(0,0,newItem)

優化1:設置垂直方向表格頭標簽

TableWidget.setVerticalHeaderLabels(['行1', '行2', '行3', '行4'])

效果如下

PyQt5中QTableWidget界面控件怎么用 

優化2:設置表格頭為伸縮模式

使用QTableWidget對象的horizontalHeader()函數,設置表格為自適應的伸縮模式,即可根據窗口的大小來改變網格的大小

TableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

PyQt5中QTableWidget界面控件怎么用 

優化3:將表格設置為禁止編輯
在默認情況下,表格中的字符是可以更改的,比如雙擊一個單元格,就可以修改原來的內容,如果想禁止這種操作,讓表格對用戶只是只讀,則可以編輯一下代碼

TableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

PyQt5中QTableWidget界面控件怎么用 

優化4:表格整行選中
表格默認選擇的是單個單元格,通過以下代碼可以設置整行選中

TableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

PyQt5中QTableWidget界面控件怎么用 

優化5:將行與列的寬度高度與文本內容的寬高相匹配

QTableWidget.resizeColumnsToContents(TableWidget)
QTableWidget.resizeRowsToContents(TableWidget)

PyQt5中QTableWidget界面控件怎么用 

優化6:表格頭的顯示與隱藏

TableWidget.verticalHeader().setVisible(False)
TableWidget.horizontalHeader().setVisible(False)

PyQt5中QTableWidget界面控件怎么用 

優化7:在單元格內放置控件
QTableWidget不僅允許往單元格內放置文字,還允許放置控件,通過QTableWidget.setItem()來添加PyQt的基本控件
這里把一個下拉列表框和一個按鈕加入單元格中,設置控件與單元格的邊距,如為3px像素,代碼如下

comBox=QComboBox()
  comBox.addItems(['男','女'])
  comBox.addItem('未知')
  comBox.setStyleSheet('QComboBox{margin:3px}')
  TableWidget.setCellWidget(0,1,comBox)

  searchBtn=QPushButton('修改')
  searchBtn.setDown(True)
  searchBtn.setStyleSheet('QPushButton{margin:3px}')
  TableWidget.setCellWidget(0,2,searchBtn)

PyQt5中QTableWidget界面控件怎么用

實例二:在表格中快速定位到指定行

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

class Table(QWidget):
 def __init__(self):
  super(Table, self).__init__()
  self.initUI()
 def initUI(self):
  #設置標題與初始大小
  self.setWindowTitle('QTableWidget例子')
  self.resize(600,800)

  ##水平布局
  layout=QHBoxLayout()
  #實例化表格視圖(30*4)
  tablewidget=QTableWidget(30,4)
  layout.addWidget(tablewidget)

  for i in range(30):
   for j in range(4):
    itemContent='(%d,%d)'%(i,j)
    #為每個表格內添加數據
    tablewidget.setItem(i,j,QTableWidgetItem(itemContent))

  self.setLayout(layout)

  #遍歷表格查找對應項
  text='(10,1)'
  items=tablewidget.findItems(text,Qt.MatchExactly)
  item=items[0]
  #選中單元格
  item.setSelected(True)
  #設置單元格的背脊顏色為紅
  item.setForeground(QBrush(QColor(255,0,0)))

  row=item.row()
  #通過鼠標滾輪定位,快速定位到第十一行
  tablewidget.verticalScrollBar().setSliderPosition(row)
if __name__ == '__main__':
 app=QApplication(sys.argv)
 table=Table()
 table.show()
 sys.exit(app.exec_())

效果如圖

PyQt5中QTableWidget界面控件怎么用

實例三:QTableWidget的高級用法

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem)
from PyQt5.QtGui import QBrush, QColor, QFont
from PyQt5.QtCore import Qt


class Table(QWidget):
 def __init__(self):
  super().__init__()
  self.initUI()

 def initUI(self):
  #設置標題與初始大小
  self.setWindowTitle("QTableWidget 例子")
  self.resize(430, 230)

  #水平布局,初始表格為(4*3),添加到布局中
  conLayout = QHBoxLayout()
  tableWidget = QTableWidget(5,3)
  conLayout.addWidget(tableWidget)

  #設置水平頭標簽
  tableWidget.setHorizontalHeaderLabels(['姓名', '性別', '體重(kg)'])

  #創建新條目,設置背景顏色,添加到表格指定行列中
  newItem = QTableWidgetItem("張三")
  #newItem.setForeground(QBrush(QColor(255, 0, 0)))
  tableWidget.setItem(0, 0, newItem)

  # 創建新條目,設置背景顏色,添加到表格指定行列中
  newItem = QTableWidgetItem("男")
  #newItem.setForeground(QBrush(QColor(255, 0, 0)))
  tableWidget.setItem(0, 1, newItem)

  # 創建新條目,設置背景顏色,添加到表格指定行列中
  newItem = QTableWidgetItem("160")
  #newItem.setForeground(QBrush(QColor(255, 0, 0)))
  tableWidget.setItem(0, 2, newItem)

  # newItem = QTableWidgetItem("李四")
  # #將字體加粗,黑色字體
  # newItem.setFont(QFont('Times',12,QFont.Black))
  # tableWidget.setItem(1, 0, newItem)
  #
  # # 創建新條目,設置背景顏色,添加到表格指定行列中
  # newItem = QTableWidgetItem("男")
  # newItem.setFont(QFont('Times', 12, QFont.Black))
  # tableWidget.setItem(1, 1, newItem)
  #
  # # 創建新條目,設置背景顏色,添加到表格指定行列中
  # newItem = QTableWidgetItem("150")
  # newItem.setFont(QFont('Times', 12, QFont.Black))
  # tableWidget.setItem(1, 2, newItem)
  #
  # newItem = QTableWidgetItem("王五")
  # #將字體加粗,黑色字體
  # newItem.setFont(QFont('Times',12,QFont.Black))
  # tableWidget.setItem(2, 0, newItem)
  #
  # # 創建新條目,設置背景顏色,添加到表格指定行列中
  # newItem = QTableWidgetItem("女")
  # newItem.setFont(QFont('Times', 12, QFont.Black))
  # tableWidget.setItem(2, 1, newItem)
  #
  # # 創建新條目,設置背景顏色,添加到表格指定行列中
  # newItem = QTableWidgetItem("175")
  # newItem.setFont(QFont('Times', 12, QFont.Black))

  # 設置單元格文本的對齊方式
  #newItem.setTextAlignment(Qt.AlignRight|Qt.AlignBottom)
  #tableWidget.setItem(2, 2, newItem)


  #按照體重排序
  #Qt.DescendingOrder降序
  #Qt.AscEndingOrder升序
  #tableWidget.sortItems(2,Qt.DescendingOrder)

  #合并單元格
  #tableWidget.setSpan(2,0,4,1)

  #設置單元格的大小
  #將第一列的單元寬度設置為150
  #tableWidget.setColumnWidth(0,150)
  #將第一行的單元格高度的設置為120
  #tableWidget.setRowHeight(0,120)


  #表格中不顯示分割線
  #tableWidget.setShowGrid(False)

  #隱藏垂直頭標簽
  #tableWidget.verticalHeader().setVisible(False)




  self.setLayout(conLayout)


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

初始運行,效果如下

PyQt5中QTableWidget界面控件怎么用 

優化1:設置單元格的文本顏色,將第一行中的三個文本顏色設置為紅色

newItem.setForeground(QBrush(QColor(255, 0, 0)))

PyQt5中QTableWidget界面控件怎么用 

優化2:將字體加粗

#設置字體類型,大小號,顏色
newItem.setFont(QFont('Times',12,QFont.Black))

PyQt5中QTableWidget界面控件怎么用 

優化3:設置單元格的排序方式

from PyQt5.QtCore import Qt
#按照體重排序
#Qt.DescendingOrder降序
#Qt.AscEndingOrder升序
tableWidget.sortItems(2,Qt.DescendingOrder)

PyQt5中QTableWidget界面控件怎么用 

優化4:單元格的文本對齊方式
這里更改了王五體重的文本對齊方式為右下角處

# 設置單元格文本的對齊方式(右下)
  newItem.setTextAlignment(Qt.AlignRight|Qt.AlignBottom)
  tableWidget.setItem(2, 2, newItem)

PyQt5中QTableWidget界面控件怎么用 

優化5:合并單元格
將表格中第一行第一列的單元格,更改為占據5行1列

#合并單元格
tableWidget.setSpan(2,0,5,1)

PyQt5中QTableWidget界面控件怎么用 

優化6:設置單元格的大小
這里將第一行寬度設置為150,高度設置為120

#將第一列的單元寬度設置為150
tableWidget.setColumnWidth(0,150)
#將第一行的單元格高度的設置為120
tableWidget.setRowHeight(0,120)

PyQt5中QTableWidget界面控件怎么用 

優化7:在表格中不顯示分割線
QTableWidget類的setShowGrid()函數是從QTableView類繼承的,用來設置是否顯示表格的分割線,默認顯示分割線

#表格中不顯示分割線
tableWidget.setShowGrid(False)

PyQt5中QTableWidget界面控件怎么用 

優化8:為單元格添加圖片
還可以在單元格內添加圖片并顯示圖片描述信息,代碼如下
這里圖片放置在王五體重的單元格內

#添加圖片
newItem = QTableWidgetItem(QIcon("./images/bao1.png"), "背包")
tableWidget.setItem(2, 2, newItem)

PyQt5中QTableWidget界面控件怎么用

實例四:單元格內圖片的顯示

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

class Table(QWidget):
 def __init__(self):
  super().__init__()
  self.initUI()

 def initUI(self):
  #設置標題與初始大小
  self.setWindowTitle("QTableWidget 例子")
  self.resize(1000 ,900);
  #設置布局,初始表格5*3
  conLayout = QHBoxLayout()
  table= QTableWidget(5,3)

  #設置表格水平頭標簽
  table.setHorizontalHeaderLabels(['圖片1' ,'圖片2' ,'圖片3'])
  #設置不可編輯模式
  table.setEditTriggers( QAbstractItemView.NoEditTriggers)
  #設置圖片的大小
  table.setIconSize(QSize(300 ,200))

  #設置所有行列寬高數值與圖片大小相同
  for i in range(3): # 讓列寬和圖片相同
   table.setColumnWidth(i , 300)
  for i in range(5): # 讓行高和圖片相同
   table.setRowHeight(i , 200)

  for k in range(15):
   i = k/ 3
   j = k % 3

   #實例化表格窗口條目
   item = QTableWidgetItem()
   #用戶點擊表格時,圖片被選中
   item.setFlags(Qt.ItemIsEnabled)
   #圖片路徑設置與圖片加載
   icon = QIcon(r'.\images\bao%d.png' % k)
   item.setIcon(QIcon(icon))
   #輸出當前進行的條目序號
   print('e/icons/%d.png i=%d j=%d' % (k, i, j))
   #將條目加載到相應行列中
   table.setItem(i, j, item)


  conLayout.addWidget(table)
  self.setLayout(conLayout)



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

效果如下

PyQt5中QTableWidget界面控件怎么用

實例五:支持右鍵菜單

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


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

 def initUI(self):
  # 設置標題與初始大小
  self.setWindowTitle('QTableWidget demo')
  self.resize(500, 300)

  # 水平布局,初始表格5*3,添加到布局
  layout = QHBoxLayout()
  self.tableWidget = QTableWidget(5, 3)
  layout.addWidget(self.tableWidget)

  # 設置表格水平方向的頭標簽
  self.tableWidget.setHorizontalHeaderLabels([ '姓名', '性別', '體重' ])

  # 設置水平方向自動伸縮填滿窗口
  self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

  # 添加數據到指定行列
  newItem = QTableWidgetItem("張三")
  self.tableWidget.setItem(0, 0, newItem)

  newItem = QTableWidgetItem("男")
  self.tableWidget.setItem(0, 1, newItem)

  newItem = QTableWidgetItem("160")
  self.tableWidget.setItem(0, 2, newItem)

  newItem = QTableWidgetItem("李四")
  self.tableWidget.setItem(1, 0, newItem)

  newItem = QTableWidgetItem("女")
  self.tableWidget.setItem(1, 1, newItem)

  newItem = QTableWidgetItem("120")
  self.tableWidget.setItem(1, 2, newItem)

  # 允許右鍵產生菜單
  self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
  # 將右鍵菜單綁定到槽函數generateMenu
  self.tableWidget.customContextMenuRequested.connect(self.generateMenu)

  self.setLayout(layout)

 def generateMenu(self, pos):
  # 計算有多少條數據,默認-1,
  row_num = -1
  for i in self.tableWidget.selectionModel().selection().indexes():
   row_num = i.row()

  # 表格中只有兩條有效數據,所以只在前兩行支持右鍵彈出菜單
  if row_num < 2:
   menu = QMenu()
   item1 = menu.addAction(u'選項一')
   item2 = menu.addAction(u'選項二')
   item3 = menu.addAction(u'選項三')
   action = menu.exec_(self.tableWidget.mapToGlobal(pos))
   # 顯示選中行的數據文本
   if action == item1:
    print('你選了選項一,當前行文字內容是:', self.tableWidget.item(row_num, 0).text(),
      self.tableWidget.item(row_num, 1).text(),
      self.tableWidget.item(row_num, 2).text())
   if action == item2:
    print('你選了選項二,當前行文字內容是:', self.tableWidget.item(row_num, 0).text(),
      self.tableWidget.item(row_num, 1).text(),
      self.tableWidget.item(row_num, 2).text())
   if action == item3:
    print('你選了選項三,當前行文字內容是:', self.tableWidget.item(row_num, 0).text(),
      self.tableWidget.item(row_num, 1).text(),
      self.tableWidget.item(row_num, 2).text())


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

PyQt5中QTableWidget界面控件怎么用

看完了這篇文章,相信你對“PyQt5中QTableWidget界面控件怎么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沈丘县| 长武县| 宁河县| 丰都县| 小金县| 青川县| 茂名市| 常山县| 张掖市| 阿克| 古丈县| 泗阳县| 旬阳县| 万安县| 海盐县| 布拖县| 文成县| 和平县| 沙田区| 卓资县| 从化市| 民乐县| 海安县| 五大连池市| 灵寿县| 呼图壁县| 西城区| 绥滨县| 萍乡市| 博白县| 会昌县| 丰台区| 宽甸| 北海市| 砀山县| 烟台市| 安达市| 深泽县| 常宁市| 新疆| 斗六市|