如何在不将条码保存到文件的情况下将条码输出到 QLabel?
How can I output an barcode to QLabel without saving it to a file?
告诉我如何在不将图像保存到文件的情况下输出图像?也许你可以以某种方式将它保存到 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())
我不想每次都保存图片然后重新上传。有没有办法直接输出到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())
告诉我如何在不将图像保存到文件的情况下输出图像?也许你可以以某种方式将它保存到 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())
我不想每次都保存图片然后重新上传。有没有办法直接输出到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())