PyQt 5 高级界面控件

本文介绍了PyQt5中两种重要的表格控件QTableView和QTableWidget的使用。QTableView通过设置模型和视图实现数据展示,支持表格填充、调整大小和滚动条管理。QTableWidget则直接操作表格项,方便快速创建表格。示例代码展示了如何初始化表格、添加和删除数据,并调整表格大小以适应内容。
摘要由CSDN通过智能技术生成

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_())

运行结果:
在这里插入图片描述

2. 参考链接

python打印字符串的上下标

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值