PyQt 5 高级界面控件
1. 表格
1.1 QTableView
界面文件代码
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'QTableView.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(600, 400)
self.tableView = QtWidgets.QTableView(Form)
self.tableView.setGeometry(QtCore.QRect(20, 20, 400, 200))
self.tableView.setObjectName("tableView")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
逻辑文件代码
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
from QTableView import Ui_Form
class Table(QWidget,Ui_Form):
def __init__(self,arg = None):
super(Table, self).__init__(arg)
self.setupUi(self)
self.setWindowTitle("QTableView表格视图控件的例子")
self.resize(1000,500)
self.model = QStandardItemModel(4,4)
self.model.setHorizontalHeaderLabels(['标题1','标题2','标题3','标题4'])
for row in range(4):
for column in range(4):
item = QStandardItem("row %s, column %s"%(row,column))
self.model.setItem(row,column,item)
self.tableView.setModel(self.model)
# 一开始表格并没有被填满窗口,每列可以自由拉动,但是可能会出现滚动条,因此需要填满表格,代码如下
self.tableView.horizontalHeader().setStretchLastSection(True)
self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# 重新调整表格的大小
self.tableView.resize(600,300)
# 添加数据
self.model.appendRow([
QStandardItem("row %s, column %s" % (11, 11)),
QStandardItem("row %s, column %s" % (11, 11)),
QStandardItem("row %s, column %s" % (11, 11)),
QStandardItem("row %s, column %s" % (11, 11)),
])
# 删除数据
index = self.tableView.currentIndex()
print(index.row())
self.model.removeRow(index.row())
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = Table()
myWin.show()
sys.exit(app.exec_())
运行结果:
1.2 QTableWidge
界面文件代码
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'QTableWidget.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(800, 600)
self.tableWidget = QtWidgets.QTableWidget(Form)
self.tableWidget.setGeometry(QtCore.QRect(30, 40, 256, 192))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(0)
self.tableWidget.setRowCount(0)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
逻辑文件代码
import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QApplication, QTableWidgetItem, QHeaderView)
from QTableWidget import Ui_Form
class Table(QWidget,Ui_Form):
def __init__(self, arg=None):
super(Table, self).__init__(arg)
self.setupUi(self)
self.setWindowTitle("QTableWidge例子")
tableWidget = self.tableWidget
tableWidget.setRowCount(5)
tableWidget.setColumnCount(3)
tableWidget.setHorizontalHeaderLabels(['参数名称','参数说明','参数设置'])
# 第一行alpha
newItem = QTableWidgetItem(chr(945))
tableWidget.setItem(0, 0, newItem)
newItem = QTableWidgetItem('模糊系数')
tableWidget.setItem(0, 1, newItem)
newItem = QTableWidgetItem('[1.1:0.1,:2.5]')
tableWidget.setItem(0, 2, newItem)
# 第二行rho
newItem = QTableWidgetItem(chr(961))
tableWidget.setItem(1, 0, newItem)
newItem = QTableWidgetItem('算法步长')
tableWidget.setItem(1, 1, newItem)
newItem = QTableWidgetItem('{0.01,0.1,0.5,1,2,3,4,5,6,7,8,9,10}')
tableWidget.setItem(1, 2, newItem)
# 第三行gamma
newItem = QTableWidgetItem(chr(947))
tableWidget.setItem(2, 0, newItem)
newItem = QTableWidgetItem('熵正则项参数')
tableWidget.setItem(2, 1, newItem)
newItem = QTableWidgetItem('[0.001,0.01,0.1,0.5,0.7,0.9,1,1.5,2,2.5,3,5,7,9,10]')
tableWidget.setItem(2, 2, newItem)
# 第四行miu
newItem = QTableWidgetItem(chr(956))
tableWidget.setItem(3, 0, newItem)
newItem = QTableWidgetItem('熵正则项参数')
tableWidget.setItem(3, 1, newItem)
newItem = QTableWidgetItem('[0.001,0.01, 0.1,0.5,1,3,5,7,9,10,20,50]')
tableWidget.setItem(3, 2, newItem)
# 第五行sigma
newItem = QTableWidgetItem(chr(963))
tableWidget.setItem(4, 0, newItem)
newItem = QTableWidgetItem('核的参数')
tableWidget.setItem(4, 1, newItem)
LIST = [u'2\u207B\u2078',u'2\u207B\u2077','...',u'2\u207B\u2077',u'2\u207B\u2078']
# print(u'2\u207B\u2075',u'2\u207B\u2075')
newItem = QTableWidgetItem(
str(LIST)
)
tableWidget.setItem(4, 2, newItem)
# 一开始表格并没有被填满窗口,每列可以自由拉动,但是可能会出现滚动条,因此需要填满表格,代码如下
# tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# 将行和列的宽度、高度设置为所显示内容的宽度、高度相匹配
tableWidget.resizeColumnsToContents()
tableWidget.resizeRowsToContents()
# 重新设置tableWidget的大小布局
tableWidget.resize(550,200)
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Table()
example.show()
sys.exit(app.exec_())
运行结果: