首页 > 解决方案 > 将 xps 文件从 mysql 检索到 QtableWidget 时出现问题

问题描述

我正在检索已经在 mysql 上上传到 QTableWiget 的 xps 文件,我刚刚遇到以下问题,需要将输出插入到 Qtablewidget 是覆盖 IO.Bytes 对象。

在此处输入图像描述

def insert_table_in_find_data(self):
    die_no = self.comboBox_18.currentText()
    try:
        mydb = con.connect(host= "localhost", user ="root", password='''''', db="die")
        cursor = mydb.cursor()
        qry = ('''SELECT mod_code,mod_date,product_type,profile_before,spec_weight,production_line,mod_request,mod_photo,profile_after,spec_dimensions,mod_production_line,size,pattern,mod_executer,dept_resp,quality_supervisor,prod_resp,prod_supervisor,prod_team,prod_shift,profile_condition,mod_reason,mod_description,notes FROM product WHERE die_no = %s  ''')
        # qry = ('''SELECT mod_code,mod_date,product_type,spec_weight,production_line,mod_request,spec_dimensions,mod_production_line,size,pattern,mod_executer,dept_resp,quality_supervisor,prod_resp,prod_supervisor,prod_team,prod_shift,profile_condition,mod_reason,mod_description,notes FROM product WHERE die_no = %s  ''')

        value=die_no
        cursor.execute(qry,(value,))
        result = cursor.fetchall()
        print(result)


        if result :
            self.tableWidget.setRowCount(0)
            r=0
            c=0 

            for row_number , row_data in enumerate (result):
                r+=1
                c = 0 
                for row_number,data in enumerate(row_data):
                    c+=1

                self.tableWidget.clear()
                self.tableWidget.setRowCount(0)
                self.tableWidget.setColumnCount(c)
                for row_number , row_data in enumerate (result):
                    self.tableWidget.insertRow(row_number)
                    for column_number , data in enumerate (row_data):
                        if column_number == 3 :
                            data1=base64.b64decode(result[0][3])
                            data=io.BytesIO(data1)
                            self.label = QTableWidgetItem()
                            self.label_2 = QLabel()
                            print(11)

                            if data1 :                                    
                                with tempfile.NamedTemporaryFile(suffix='.xps', delete=False) as f:
                                    f.write(data.getvalue())
                                    n=f.name
                                    self.label_2.setText(n)
                                    # self.label_2.
                                    self.tableWidget.setCellWidget(row_number, column_number, self.label_2)

另一方面,我准备了一个功能,以防用户单击该 o/p ,他可以打开 xps 文件进行预览

代码

def open_profile(self,item):
    if item.column == 1:
        link_profile=self.tableWidget.item(0,3).text()
        WINxps_PATH = r'C:\Windows\system32\xpsrchvw.exe'
        subprocess.Popen([WINxps_PATH, link_profile])

我有一个问题,如何使该功能适用​​于特定列而不适用于所有项目或列。

标签: pythonmysqlpyqt5qtablewidget

解决方案


推荐阅读