#python #pyqt #pyqt5
#python #pyqt #pyqt5
Вопрос:
Я создаю приложение для рисования, как показано в этом руководстве: http://www.newthinktank.com/2018/07/qt-tutorial-5-paint-app / Разница в том, что это сделано на c с помощью Qt, и я пытаюсь перевести его на Python Qt. Однако я не могу найти никакого эквивалента «# if QT_CONFIG» для Python в коде:
#if QT_CONFIG(printdialog)
// Can be used to print
QPrinter printer(QPrinter::HighResolution);
// Open printer dialog and print if asked
QPrintDialog printDialog(amp;printer, this);
if (printDialog.exec() == QDialog::Accepted) {
QPainter painter(amp;printer);
QRect rect = painter.viewport();
QSize size = image.size();
size.scale(rect.size(), Qt::KeepAspectRatio);
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(image.rect());
painter.drawImage(0, 0, image);
}
#endif // QT_CONFIG(printdialog)
Ответ №1:
Нет прямого перевода QT_CONFIG
, поскольку это команда предварительной обработки, используемая компилятором C , и эта концепция не существует в python.
Итак, если это можно сделать, это логический или функциональный перевод, цель этой команды — выяснить, включила ли библиотека Qt, используемая для компиляции, флаг для подмодуля printsupport, что в случае PyQt5 подразумевает, что модуль QtPrintSupport существует, например, просто используйте try-except:
def print(self):
try:
from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
except ImportError as e:
print("not print support")
else:
printer = QPrinter(QPrinter.HighResolution)
printDialog = QPrintDialog(printer, self)
if printDialog.exec_() == QDialog.Accepted:
painter = QPainter(printer)
rect = painter.viewport()
size = self.image.size()
size.scale(rect.size(), Qt.KeepAspectRatio)
painter.setViewport(rect.x(), rect.y(), size.width(), size.height())
painter.setWindow(self.image.rect())
painter.drawImage(0, 0, self.image)
Примечание: По умолчанию официально предоставляемая библиотека всегда поставляется с флагом printdialog, включенным по умолчанию, поэтому вы можете просто игнорировать QT_CONFIG(printdialog)
в своем переводе, если только вы не скомпилировали Qt с отключенным этим флагом, а затем использовать этот Qt для компиляции PyQt5.