书接前文
pyqt表的代码结构分析:
三要素:
-
赋值:
我是谁? -
赋形:
我长啥样? -
赋位
我该在哪儿?
小栗子:
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_())
修改一下代码:
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.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])
newItem=QTableWidgetItem('张三')
TableWidget.setItem(0,0,newItem)
comBox=QComboBox() # 我长啥样?
comBox.addItems(['男','女','为知']) # 我是谁?
comBox.setStyleSheet('QComboBox{margin:3px}') # 我长啥样?
TableWidget.setCellWidget(0,1,comBox) # 我在哪儿?
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_())
加入数组四维:
import sys
from PyQt5.QtWidgets import *
import numpy as np
class screwsTable(QWidget):
def __init__(self):
super(screwsTable, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("screwsTable")
self.resize(400, 300)
data = np.array([[[[-3.3042624, -34.29845047, -92.78063965],
[-19.51710592, -70.68330269, -90.28064089]],
[[-3.3042624, -34.29845047, -92.78063965],
[12.31963874, -70.68330269, -87.78064089]]],
[[[-6.36676407, -37.65069962, -59.52416229],
[11.32474047, -70.07037429, -59.52416067]],
[[-6.36676407, -37.65069962, -59.52416229],
[-17.40294709, -72.80634454, -57.02416067]]]])
self.fids = data.shape[0]
layout = QHBoxLayout()
TableWidget = QTableWidget(self.fids * 2, 3)
fid = []
fidlist = []
P = []
Ps = []
itemsfids = []
itemsfidlist = []
itemsP = []
vertebra = "T12"
levels = (
"C1", "C2", "C3", "C4", "C5", "C6", "C7", "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11",
"T12", "L1", "L2", "L3", "L4", "L5", "S1", "部位")
level = []
side = []
for i in range(levels.index(vertebra), levels.index(vertebra) + self.fids):
for ii, vv in enumerate(["左", "右"]):
Pa = data[:, :, 0, :][i - levels.index(vertebra)][ii]
# print(levels[i],vv,vvv,P)
level.append(levels[i])
side.append(vv)
fidlist.append(levels[i] + vv)
fid.append(ii)
P.append(Pa)
# TableWidget.setHorizontalHeaderLabels(['No','穿刺点','PSA','PTA','直径','钉长'])
TableWidget.setHorizontalHeaderLabels(['No', '穿刺点', '点'])
for i in range(self.fids * 2):
Label = str(i + 1)
qtLabel = QTableWidgetItem(Label)
itemsfids.append(qtLabel)
TableWidget.setItem(i, 0, qtLabel)
Fid = str(fidlist[i])
qtFid = QTableWidgetItem(Fid)
itemsfidlist.append(qtFid)
TableWidget.setItem(i, 1, qtFid)
Ps = str(P[i])
qtPSA = QTableWidgetItem(Ps)
itemsP.append(qtPSA)
TableWidget.setItem(i, 2, qtPSA)
layout.addWidget(TableWidget)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = screwsTable()
win.show()
sys.exit(app.exec_())
好!