Как сохранить свой рисунок на PyQt5
Прошу помочь. QR код выходит на экран. но как сохранить это рисунок на рабочий стол
import sys
import qrcode
from PIL.ImageQt import ImageQt
from PIL import Image
from PIL.ImageQt import ImageQt
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QStatusBar, QVBoxLayout, QHBoxLayout
from PyQt5.QtGui import QFont, QPixmap, QImage
from PyQt5.QtCore import Qt
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(472, 502)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 40, 81, 21))
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(140, 40, 301, 20))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(30, 80, 131, 23))
self.pushButton.setObjectName("pushButton")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(60, 120, 341, 321))
self.label_2.setText("")
self.label_2.setObjectName("label_2")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(170, 80, 131, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(310, 80, 131, 23))
self.pushButton_3.setObjectName("pushButton_3")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 472, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "ВВЕДИТЕ ТЕКСТ:"))
self.pushButton.setText(_translate("MainWindow", "ГЕНЕРАЦИЯ В QR КОД"))
self.pushButton_2.setText(_translate("MainWindow", "СОХРАНИТЬ QR CODE"))
self.pushButton_3.setText(_translate("MainWindow", "СБРОСИТЬ"))
self.pushButton.clicked.connect(self.qrcode)
self.pushButton_3.clicked.connect(self.sbrosit_vse)
def qrcode(self):
text = self.lineEdit.text()
img = qrcode.make(text)
qr = ImageQt(img)
pix = QPixmap.fromImage(qr)
self.label_2.setPixmap(pix)
def sbrosit_vse (self):
self.lineEdit.clear()
self.label_2.clear()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
pixmap : QPixmap
Это свойство содержит растровое изображение метки.
bool QPixmap::
save(const QString &fileName, const char *format = nullptr, int quality = -1) constСохраняет растровое изображение в файл с заданным именем файла, используя указанный формат файла изображения и коэффициент качества. В случае успеха возвращает true; в противном случае возвращает false.
import sys
import os
import qrcode
from PIL.ImageQt import ImageQt
from PIL import Image
from PIL.ImageQt import ImageQt
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, \
QPushButton, QStatusBar, QVBoxLayout, QHBoxLayout, QMainWindow
from PyQt5.QtGui import QFont, QPixmap, QImage
from PyQt5.QtCore import Qt
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(472, 502)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 40, 81, 21))
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(140, 40, 301, 20))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(30, 80, 131, 23))
self.pushButton.setObjectName("pushButton")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(60, 120, 341, 321))
self.label_2.setText("")
self.label_2.setObjectName("label_2")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(170, 80, 131, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(310, 80, 131, 23))
self.pushButton_3.setObjectName("pushButton_3")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 472, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "ВВЕДИТЕ ТЕКСТ:"))
self.pushButton.setText(_translate("MainWindow", "ГЕНЕРАЦИЯ В QR КОД"))
self.pushButton_2.setText(_translate("MainWindow", "СОХРАНИТЬ QR CODE"))
self.pushButton_3.setText(_translate("MainWindow", "СБРОСИТЬ"))
class Window(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.qrcode)
self.pushButton_3.clicked.connect(self.sbrosit_vse)
self.pushButton_2.clicked.connect(self.save_qr_code) # +++
def qrcode(self):
text = self.lineEdit.text()
img = qrcode.make(text)
qr = ImageQt(img)
pix = QPixmap.fromImage(qr)
self.label_2.setPixmap(pix)
def sbrosit_vse (self):
self.lineEdit.clear()
self.label_2.clear()
def save_qr_code(self):
current_dir = os.getcwd()
file_name = self.lineEdit.text()
if file_name:
path = os.path.join(current_dir, file_name + '.png')
self.label_2.pixmap().save(path)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
# MainWindow = QtWidgets.QMainWindow()
# ui = Ui_MainWindow()
# ui.setupUi(MainWindow)
w = Window()
w.show()
sys.exit(app.exec_())
