首页 > 其他分享 >PyQt5-Qtablewidget

PyQt5-Qtablewidget

时间:2024-11-15 10:34:53浏览次数:1  
标签:self Qtablewidget PyQt5 progress table view data row

创建表格

from PyQt5.QtWidgets import QTableView,QStyledItemDelegate, QComboBox,QTextEdit
from PyQt5.QtCore import QAbstractTableModel,Qt, QModelIndex,QEvent,QRect,QSize,QVariant
from PyQt5.QtGui import QFontMetrics


class TaskTable(QTableWidget):  
    def __init__(self,row_count,col_count):  
        super().__init__(row_count,col_count)  
        self.setHorizontalHeaderLabels(['Level', 'To do List','Progress','Sub Task','Duration','Comment','Category'])  #
        self.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
        self.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive)
        self.setColumnWidth(0,100) 
        self.setColumnWidth(1,340) 
        self.setColumnWidth(2,100)
        self.setColumnWidth(3,400)
        self.setColumnWidth(4,100)
        self.setColumnWidth(5,200)
        self.setColumnWidth(6,100)
        self.verticalHeader().hide()
        self.horizontalHeader().setStyleSheet("QHeaderView::section { background-color: lightblue; }") 
        for row in range(row_count):  
            item = QTableWidgetItem() 
            item.setFlags(item.flags()|Qt.ItemIsUserCheckable) 
            item.setCheckState(Qt.Unchecked)    
            self.setItem(row, 3, item) 
            items_in_progress = ['Not start', 'In progress', 'Done','Pending others','Done but keep']
            items_in_cagetory = ['MOMA', 'SIPG', 'APILearning','Others','WorkRule']
            combox_progress = self.addcomBox(items_in_progress,0)
            self.setCellWidget(row, 2, combox_progress)
            combox_progress = self.addcomBox(items_in_cagetory,3)
            self.setCellWidget(row, 6, combox_progress)

    def addcomBox(self,items,default_index):
        comboBox1 = QComboBox()
        comboBox1.addItems(items)
        comboBox1.setCurrentIndex(default_index)
        return  comboBox1 # 设置默认值,例如 'Option A2'
        
    def getvalue(self,row,columnindex):
        cell = self.cellWidget(row, columnindex) if columnindex in [2, 6] else self.item(row, columnindex)
        if cell and isinstance(cell, QComboBox):
            return cell.currentText()
        elif cell:
            value = cell.text()
            try:
                return int(value)
            except ValueError:
                return value
        else:
            return ''

显示窗口

import sys
from PyQt5.QtWidgets import * # QApplication,QMainWindow,QWidget,QLabel,QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt  
from GUI.task import TaskTable
from GUI.date import DateLabel
from GUI.control import controls
from Back.db import initDB


iconpath = 'refer\MainLogo.png'
class MainWindow(QMainWindow):
    def __init__(self):
        try:
            super().__init__()
            self.initUI()
            
        except Exception as e:
            print(e)
    def initUI(self):
        try:
            self.setWindowTitle("JXY_Note")
            self.setWindowIcon(QIcon(iconpath))
            central_widget = QWidget(self)
            # self.central_widget.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
            self.setCentralWidget(central_widget)
            # print(self.centralWidget().size())
            layout = QVBoxLayout(central_widget)
            self.contrals = controls()
            self.table_date = DateLabel()
            self.taskdate =  self.table_date.text()
            self.data = self.init_data(self.taskdate)
            self.table_view = TaskTable(self.data)
            layout.addWidget(self.table_date)
            layout.addWidget(self.table_view)
            print("add table")
            self.save_button = QPushButton('Save')
            self.save_button.clicked.connect(self.save_data)
            self.retrieve_button = QPushButton('Retrieve')
            self.retrieve_button.clicked.connect(self.retrieve_data)   
            self.clear_button = QPushButton('Clear')
            self.clear_button.clicked.connect(self.clear_data)
            layout.addWidget(self.save_button)
            layout.addWidget(self.retrieve_button)
            layout.addWidget(self.clear_button)
            self.showMaximized()
        except Exception as e:
            print(e)
    def save_data(self):
        data = []
        for row in range(self.table_view.rowCount()):
            row_data = []
            if self.table_view.item(row,1):
                # state = self.table_view.item(row,3).checkState()
                # checkStatus = "1" if state == Qt.Checked else "0"
                checkStatus = "0"
                taskdate =  self.table_date.text()
                for col in range(self.table_view.columnCount()):
                    cell = self.table_view.getvalue(row,col)
                    row_data.append(cell)
                row_data.insert(4,checkStatus)
                row_data.insert(9,taskdate)
                data.append(tuple(row_data))
        print(data)
        self.contrals.save_data_task(data)
        QMessageBox.information(self, "Success","Data saved successfully!")
    def retrieve_data(self):
        taskdate =  self.table_date.text()
        print(taskdate)
        rows = self.contrals.retrieve_data_task(taskdate)
        print(rows)
        self.initUI() 
        for row_idx, (ids,level,to_do,progress,subtask,subtask_status,duration,comment,category,date,dependance) in enumerate(rows):
            self.table_view.setItem(row_idx,0,QTableWidgetItem(str(level)))
            self.table_view.setItem(row_idx,1,QTableWidgetItem(str(to_do)))
            progress_cellcombox = self.table_view.cellWidget(row_idx,2)
            progress_index = progress_cellcombox.findText(str(progress))
            if progress_index >= 0:
                progress_cellcombox.setCurrentIndex(progress_index)
            else:
                progress_cellcombox.setCurrentIndex(0)
            check = QTableWidgetItem(subtask)
            if subtask_status == '0':   
                check.setCheckState(Qt.Unchecked)    
                self.table_view.setItem(row_idx, 3, check)
            if subtask_status == '1':
                check.setCheckState(Qt.Checked)  
                self.table_view.setItem(row_idx, 3, check)
            self.table_view.setItem(row_idx,4,QTableWidgetItem(str(duration)))
            self.table_view.setItem(row_idx,5,QTableWidgetItem(str(comment)))
            category_combox = self.table_view.cellWidget(row_idx,6)
            category_index = category_combox.findText(str(category))
            if category_index >= 0:
                category_combox.setCurrentIndex(category_index)
            else:
                category_combox.setCurrentIndex(0)
    def init_data(self,taskdate):
        rows = self.contrals.retrieve_data_task(taskdate)
        data = []
        for row_idx, (ids,level,to_do,progress,subtask,subtask_status,duration,comment,category,date,dependance) in enumerate(rows):
            row = [level,to_do,progress,subtask,duration,comment,category]
            data.append(row)
        return data

            
    def clear_data(self):
        self.db = initDB()
        self.db.delete_data("tasks")
        self.retrieve_data()

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

代码不全,仅做练习使用

标签:self,Qtablewidget,PyQt5,progress,table,view,data,row
From: https://www.cnblogs.com/woniuguoguo/p/18547490

相关文章

  • Python 第三方库 PyQt5 的安装
    目录前言PyQt5安装不同操作系统PyQt5安装一、Windows系统二、macOS系统三、Linux系统(以Ubuntu为例)安装PyQt5可能会遇到的问题一、环境相关问题二、依赖问题三、网络问题四、安装工具问题五、运行时问题六、环境配置问题七、安装源问题八、检查错误信息......
  • 基于YOLOv8深度学习的木薯病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练
    背景及意义木薯是一种重要的农作物,广泛用于食品、饲料以及工业生产等多个领域。然而,木薯病害的发生会严重影响其产量和品质,对农民的收入和食品安全造成明显的负面影响。本文基于YOLOv8深度学习框架,通过2606张图片,训练了一个木薯叶片病害的识别模型,可用于识别5种不同的木......
  • 基于YOLO11/v10/v8/v5深度学习的煤矿传送带异物检测系统设计与实现【python源码+Pyqt5
    《------往期经典推荐------》一、AI应用软件开发实战专栏【链接】项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.......
  • PyQt5 详细安装与配置教程及使用
    文章目录Part1:安装PyQt5Part2:配置PyQt5的依赖工具QtDesigner和PyUICPart3:使用QtDesigner设计界面Part4:使用PyUIC将设计好的界面转换为.py文件Part5:通过代码显示ui界面Part1:安装PyQt5需要安装两个库,可直接通过一下命令安装pipinstallPyQt5pipinstallpyq......
  • 基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyq
    《博主简介》小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~......
  • pyqt5实现nii文件叠加显示
            最近在做一个医学影像处理的项目,要求是使用pyqt5实现T1.nii文件和靶区文件的叠加显示。之前有web前端开发和一些python基础,pyqt5和医学影像文件(nii格式文件)处理都是第一次接触。趁着十一假期比较清闲,记录一下该功能实现的过程(pyqt5相关基础就不说了,B站很多新......
  • 基于YOLOv8深度学习的吸烟/抽烟行为检测系统【python源码+Pyqt5界面+数据集+训练代码
    背景及意义吸烟行为检测对于维护公共场所的健康环境、防止火灾事故的发生以及促进健康生活方式都具有重要作用。使用基于YOLOv8的吸烟行为检测系统能够有效识别视频中的吸烟行为,从而及时采取适当措施。本文基于YOLOv8深度学习框架,通过2357张图片,训练了一个进行吸烟行为的......
  • 基于YOLOv10/YOLOv9/YOLOv8深度学习的工业螺栓螺母检测系统【python源码+Pyqt5界面+数
    背景及意义工业螺栓螺母检测系统的实施显著提高了制造行业的产品质量和工作效率。该系统的应用涵盖了从生产、检查到包装等各个环节,为精密设备的维护和安全运行提供了强大的技术支持。本文基于YOLOv10/YOLOv9/YOLOv8深度学习框架,通过2548张工业螺栓螺母的相关图片,训练了可......
  • 基于YOLOv10/v9/v8深度学习的金属焊缝缺陷检测系统【python源码+Pyqt5界面+数据集+训
    背景及意义金属焊缝缺陷检测系统的实现显著提高了众多工业领域产品的安全性和可靠性。自动化的检测过程不仅增加了工作效率,还降低了人力成本和事故风险。本文基于YOLOv10/v9/v8深度学习框架,通过3170张金属焊缝缺陷的相关图片,训练了可进行焊缝缺陷目标检测的模型,可以分别......
  • 基于YOLOv8深度学习的人脸面部口罩检测系统【python源码+Pyqt5界面+数据集+训练代码】
    背景及意义人脸口罩面部检测能够准确地检测人脸是否佩戴口罩,对于控制疫情传播、保障公共卫生安全起到关键作用。本文基于YOLOv8深度学习框架,通过853张图片,训练了一个进行人脸面部口罩的目标检测模型,能够准确的检测人脸“戴口罩”、“未戴口罩”及“未正确佩戴口罩”。并基......