繁体   English   中英

如何在不将条形码保存到文件的情况下将条形码 output 转换为 QLabel?

[英]How can I output an barcode to QLabel without saving it to a file?

告诉我如何 output 图像而不将其保存到文件? 也许您可以以某种方式将其保存到 RAM 中? 这是表单代码:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>849</width>
    <height>677</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QLineEdit" name="editNum"/>
    </item>
    <item>
     <widget class="QLabel" name="label">
      <property name="text">
       <string/>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="btnGenerate">
      <property name="text">
       <string>Сгенерировать</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="btnPrint">
      <property name="text">
       <string>Печать</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

这是功能:

import sys
import os
import barcode
from barcode.writer import ImageWriter

from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QMainWindow, QApplication 
from PyQt5.QtGui import QPixmap
from PyQt5 import uic
from PyQt5.QtCore import Qt


class BarcodeGenerate(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('barcode_design.ui', self)
        self.btnGenerate.clicked.connect(self.generate)
        self.show()
    
    def generate(self):
        self.eanNum = self.editNum.text()
        self.ean13 = barcode.get('ean13', self.eanNum, writer=ImageWriter())
        
        self.pixmap = QPixmap(self.ean13.save('barcode'))
        self.label.setPixmap(self.pixmap)

        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = BarcodeGenerate()
    sys.exit(app.exec())

我不想每次都保存图像然后再次上传。 有没有办法直接 output 到 QLabel?

一种可能的解决方案是使用io.BytesIO()作为中介并使用write()而不是save()

from io import BytesIO
import os
import sys

import barcode
from barcode.writer import ImageWriter

from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QPixmap
from PyQt5.uic import loadUi


class BarcodeGenerate(QMainWindow):
    def __init__(self):
        super().__init__()
        loadUi("barcode_design.ui", self)
        self.btnGenerate.clicked.connect(self.generate)

    def generate(self):
        value = self.editNum.text()
        ean13 = barcode.get("ean13", value, writer=ImageWriter())

        fp = BytesIO()
        ean13.write(fp)
        pixmap = QPixmap()
        pixmap.loadFromData(fp.getvalue())

        self.label.setPixmap(pixmap)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = BarcodeGenerate()
    window.show()
    sys.exit(app.exec())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM