[英]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.