PyQt——QTableWidget

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem, QAbstractItemView  )

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

	def initUI(self):
		self.setWindowTitle("QTableWidget 例子")
		self.resize(430,230);
		conLayout = QHBoxLayout()
		tableWidget = QTableWidget()
		tableWidget.setRowCount(4)
		tableWidget.setColumnCount(3)
		conLayout.addWidget(tableWidget )
		
		tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])  
        tableWidget.setVerticalHeaderLabels(["行1", "行2", "行3", "行4", "行5"])
        
        tableWidget.horizontalHeader().setSelectionResizeMode(QHeaderView.Stretch)#設置表格爲自適應的伸縮模式
		  
		newItem = QTableWidgetItem("張三")  
		tableWidget.setItem(0, 0, newItem)  
		  
		newItem = QTableWidgetItem("男")  
		tableWidget.setItem(0, 1, newItem)  
		  
		newItem = QTableWidgetItem("160")  
		tableWidget.setItem(0, 2, newItem)   
		
		# 將表格變爲禁止編輯
		#tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
		
		# 設置表格爲整行選擇
		#tableWidget.setSelectionBehavior( QAbstractItemView.SelectRows)

		# 將行和列的大小設爲與內容相匹配
		#tableWidget.resizeColumnsToContents()
		#tableWidget.resizeRowsToContents()
		
		#表格表頭的顯示與隱藏
		#tableWidget.verticalHeader().setVisible(False)
		#tableWidget.horizontalHeader().setVisible(False)
		
		# 不顯示錶格單元格的分割線
		#tableWidget.setShowGrid(False)
        # 不顯示垂直表頭
		tableWidget.verticalHeader().setVisible(False)
		comBox = QComboBox()
		combox.addItem("男")
		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)

		self.setLayout(conLayout)

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

在表格中快速定位到指定行
# -*- coding: utf-8 -*- 
'''
    【簡介】
	PyQT5的表格控件選中單元格
   
  
'''

import sys
from PyQt5.QtWidgets import  *
from PyQt5 import QtCore  
from PyQt5.QtGui import  QColor , QBrush

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

    def initUI(self):
        self.setWindowTitle("QTableWidget 例子")
        self.resize(600,800);
        conLayout = QHBoxLayout()
        tableWidget = QTableWidget()
        tableWidget.setRowCount(30)
        tableWidget.setColumnCount(4)
        conLayout.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(conLayout)
        
        #遍歷表查找對應的item
        text = "(10,1)"
        items = tableWidget.findItems(text, QtCore.Qt.MatchExactly)             
        item = items[0]
        # 選中單元格
        #item.setSelected( True)
        # 設置單元格的背景顏色爲紅色
        item.setForeground(QBrush(QColor(255, 0, 0))) 
                
        row = item.row()   
        #滾輪定位過去,快速定位到第17行
        tableWidget.verticalScrollBar().setSliderPosition(row)  
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    example = Table()  
    example.show()   
    sys.exit(app.exec_())
    

2、設置單元格

(1)設置單元格文本顏色

# -*- coding: utf-8 -*- 

'''
    【簡介】
	PyQT5中單元格內的文本顏色
   
  
'''

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

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

    def initUI(self):
        self.setWindowTitle("QTableWidget 例子")
        self.resize(430,230);
        conLayout = QHBoxLayout()
        tableWidget = QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(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)     
        
        self.setLayout(conLayout)

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

(2)字體加粗

# -*- coding: utf-8 -*- 

'''
    【簡介】
	PyQT5中單元格內的字體大小
    
  
'''

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

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

    def initUI(self):
        self.setWindowTitle("QTableWidget 例子")
        self.resize(430,230);
        conLayout = QHBoxLayout()
        tableWidget=QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        conLayout.addWidget(tableWidget )
        
        tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])  
          
        newItem = QTableWidgetItem("張三")  
        newItem.setFont( QFont( "Times", 12, QFont.Black ) )
        tableWidget.setItem(0, 0, newItem)  
                 
        newItem = QTableWidgetItem("男")  
        newItem.setFont( QFont( "Times", 12, QFont.Black ) )
        tableWidget.setItem(0, 1, newItem)  
          
        newItem = QTableWidgetItem("160") 
        newItem.setFont( QFont( "Times", 12, QFont.Black ) )
        tableWidget.setItem(0, 2, newItem)   
        
        self.setLayout(conLayout)

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

(3)設置單元格的排序方式

# -*- coding: utf-8 -*- 

'''
    【簡介】
	PyQT5中單元格排序
   
  
'''

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
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);
        conLayout = QHBoxLayout()
        tableWidget=QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        conLayout.addWidget(tableWidget )
        
        tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])  
          
        newItem = QTableWidgetItem("張三")  
        tableWidget.setItem(0, 0, newItem)  
                 
        newItem = QTableWidgetItem("男")  
        tableWidget.setItem(0, 1, newItem)  
          
        newItem = QTableWidgetItem("160") 
        tableWidget.setItem(0, 2, newItem)   
      
        newItem = QTableWidgetItem("李四")  
        tableWidget.setItem(1, 0, newItem)  
                 
        newItem = QTableWidgetItem("女")  
        tableWidget.setItem(1, 1, newItem)  
          
        newItem = QTableWidgetItem("155") 
        tableWidget.setItem(1, 2, newItem)      
       
        newItem = QTableWidgetItem("王五")  
        tableWidget.setItem(2, 0, newItem)  
                 
        newItem = QTableWidgetItem("男")  
        tableWidget.setItem(2, 1, newItem)  
          
        newItem = QTableWidgetItem("170") 
        tableWidget.setItem(2, 2, newItem)        
        
   
        # Qt.DescendingOrder 降序
        # Qt.AscendingOrder 升序
        tableWidget.sortItems(2,  Qt.DescendingOrder )
        
        self.setLayout(conLayout)

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

(4)設置單元格文本的對其方式

# -*- coding: utf-8 -*- 
'''
    【簡介】
	PyQT5中單元格中文本對齊方式例子
   
  
'''

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
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);
        conLayout = QHBoxLayout()
        tableWidget = QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        conLayout.addWidget(tableWidget )
        
        tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])  
        newItem = QTableWidgetItem("張三")  
        
        newItem.setTextAlignment( Qt.AlignRight| Qt.AlignBottom )      
        tableWidget.setItem(0, 0, newItem)  
                          
        newItem = QTableWidgetItem("男")  
        tableWidget.setItem(0, 1, newItem)  
          
        newItem = QTableWidgetItem("160")  
        tableWidget.setItem(0, 2, newItem)   
        
        self.setLayout(conLayout)

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

(5)合併單元格效果的實現

# -*- coding: utf-8 -*- 

'''
    【簡介】
	PyQT5中單元格合併例子
   
  
'''

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )

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

    def initUI(self):
        self.setWindowTitle("QTableWidget 例子")
        self.resize(430,230 );
        conLayout = QHBoxLayout()
        tableWidget= QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        conLayout.addWidget(tableWidget )
        
        tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])  
        tableWidget.setSpan(0, 0, 3, 1)   
          
        newItem = QTableWidgetItem("張三")  
        tableWidget.setItem(0, 0, newItem)  
          
        newItem = QTableWidgetItem("男")  
        tableWidget.setItem(0, 1, newItem)  
          
        newItem = QTableWidgetItem("160")  
        tableWidget.setItem(0, 2, newItem)   
        
        self.setLayout(conLayout)

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

(6)設置單元格的大小

# -*- coding: utf-8 -*- 
'''
    【簡介】
    PyQT5中單元格的寬度和高度例子
 
  
'''

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )

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

    def initUI(self):
        self.setWindowTitle("QTableWidget 例子")
        self.resize(530,300);
        conLayout = QHBoxLayout()
        tableWidget=QTableWidget()
        tableWidget.setRowCount(4)
        tableWidget.setColumnCount(3)
        conLayout.addWidget(tableWidget )
        
        tableWidget.setHorizontalHeaderLabels(['姓名','性別','體重(kg)'])  
          
        newItem = QTableWidgetItem("張三")  
        tableWidget.setItem(0, 0, newItem)  
        
        #將第1列的單元格,設置成150寬度
        tableWidget.setColumnWidth(0,150)  
        #將第1行的單元格,設置成120的高度
        tableWidget.setRowHeight(0,120)      

        newItem = QTableWidgetItem("男")  
        tableWidget.setItem(0, 1, newItem)  
          
        newItem = QTableWidgetItem("160")  
        tableWidget.setItem(0, 2, newItem)   
        
        self.setLayout(conLayout)

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

(7)單元格中不顯示分割線

tabelWidget.setShowGrid(False)
tabelWidget.verticalHeader().setVisible(False)

(8)爲單元格添加圖片

# -*- coding: utf-8 -*- 

'''
    【簡介】
	PyQT5中單元格添加圖片例子
   
  
'''

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(500,300);
		conLayout = QHBoxLayout()
		self.tableWidget= QTableWidget()
		self.tableWidget.setRowCount(5)
		self.tableWidget.setColumnCount(4)
		conLayout.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(QIcon("./images/bao1.png"), "揹包")
		self.tableWidget.setItem(0, 3, newItem ) 
		self.setLayout(conLayout)

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

(9)改變單元格中顯示的圖片大小

# -*- coding: utf-8 -*- 

'''
    【簡介】
	PyQT5中單元格改變每行單元格顯示的圖標大小例子
   
  
'''

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);
		conLayout = QHBoxLayout()
		
		table= QTableWidget()
		table.setColumnCount(3)  
		table.setRowCount(5)  
		
		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): # 27 examples of DDA  
			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_())

(10)獲取單元格的內容

tableWidget.itemCliked.connect(self.handleItemClick)
def getItem(self, item)
	print("you selected => " + item.text())
3、支持右鍵菜單
# -*- coding: utf-8 -*- 
'''
    【簡介】
    PyQT5的表格中支持右鍵菜單例子
    
  
'''

import sys
from PyQt5.QtWidgets import ( QMenu , QPushButton,  QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem, QHeaderView)
from PyQt5.QtCore import  QObject, Qt 

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

	def initUI(self):
		self.setWindowTitle("QTableWidget 例子")
		self.resize(500,300);
		conLayout = QHBoxLayout()
		self.tableWidget= QTableWidget()
		self.tableWidget.setRowCount(5)
		self.tableWidget.setColumnCount(3)
		conLayout.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("170")  
		self.tableWidget.setItem(1, 2, newItem)   
		
		self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)######允許右鍵產生子菜單
		self.tableWidget.customContextMenuRequested.connect(self.generateMenu)   ####右鍵菜單
		self.setLayout(conLayout)
        
	def generateMenu(self,pos):
		#rint( pos)
		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())

			elif action == item2:
				print( '您選了選項二,當前行文字內容是:',self.tableWidget.item(row_num,0).text(),self.tableWidget.item(row_num,1).text() ,self.tableWidget.item(row_num,2).text() )

			elif action == item3:
				print( '您選了選項三,當前行文字內容是:', self.tableWidget.item(row_num,0).text(),self.tableWidget.item(row_num,1).text() ,self.tableWidget.item(row_num,2).text() )
			else:
				return
		
if __name__ == '__main__':
	app = QApplication(sys.argv)
	example = Table()  
	example.show()   
	sys.exit(app.exec_())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章