2015-02-20 4 views
1

Я пытаюсь напечатать на бумаге главное окно вместе со своими виджетами. В идеале он должен соответствовать странице. Я попытался выполнить следующий код, но безрезультатно! Любое тело знает как?Масштабирование и печать PyQt

def printViewCustomer(self): 
    printer=QtPrintSupport.QPrinter() 
    dialog=QtPrintSupport.QPrintDialog(printer,self) 
    if (dialog.exec_()!=QtWidgets.QDialog.Accepted): 
     return 
    printWidget=self.mainViewWidget 
    painter=QtGui.QPainter(printer) 
    painter.begin(printer) 
    print(printer.paperRect().x()) 
    XScale=(printer.pageRect().width()/ (printWidget.width())) 
    YScale=(printer.pageRect().height()/(printWidget.height())) 
    Scale=(min(XScale,YScale)) 
    painter.translate((printer.paperRect().x()) + (printer.pageRect().width()/2),(printer.paperRect().y) + (printer.pageRect().height()/2)) 
    painter.scale(Scale,Scale) 
    painter.translate(-1*printWidget.width()/2,-1*printWidget.height()/2) 
    printWidget.render(painter) 
    painter.end() 

это была попытка перевода этого

QPainter painter; 
     painter.begin(&printer); 
     double xscale = printer.pageRect().width()/double(myWidget->width()); 
     double yscale = printer.pageRect().height()/double(myWidget->height()); 
     double scale = qMin(xscale, yscale); 
     painter.translate(printer.paperRect().x() + printer.pageRect().width()/2, 
          printer.paperRect().y() + printer.pageRect().height()/2); 
     painter.scale(scale, scale); 
     painter.translate(-width()/2, -height()/2); 

     myWidget->render(&painter); 
+0

Что именно вы подразумеваете под «безрезультатно?» Где это не удается? –

+0

@ChristopherPeterson Привет, это ошибка, которую я получаю, я подозреваю ее причину. У меня нет подсказки с C++ и я попытался перевести выше, но получил это неправильно! 'Traceback (последний последний вызов): painter.translate ((printer.paperRect(). X()) + (printer.pageRect(). Width()/2), (printer.paperRect(). Y) + (printer.pageRect(). height()/2)) TypeError: неподдерживаемый тип операндов для +: 'builtin_function_or_method' и 'float' ' –

ответ

2

Давайте подумаем об ошибке:

TypeError: unsupported operand type(s) for +: 'builtin_function_or_method' and 'float' 

Перед тем, как сделать что-нибудь, просто прочитать его. "неподдерживаемые типы операндов для +". Ну, похоже, что Python пытается добавить две вещи, и один из них не может быть добавлен. Читайте немного больше, и 'builtin_function_or_method' и 'float'. Похоже, вы пытаетесь добавить float к методу/функции, что просто не имеет никакого смысла.

Так просто, чтобы исправить ошибку, вы получаете:

painter.translate((printer.paperRect().x()) + (printer.pageRect().width()/2),(printer.paperRect().y) + (printer.pageRect().height()/2)) 

должен быть

painter.translate((printer.paperRect().x()) + (printer.pageRect().width()/2), (printer.paperRect().y()) + (printer.pageRect().height()/2)) 

Обратите внимание, что вы забыли вызова функция у, а вместо этого попытались использовать значение of y, который является указателем на функцию. Вы можете быть прощены за то, что забываете, что Qt использует методы для доступа к таким переменным. Вероятно, было бы больше pythonic разрешить доступ к properties, но так оно и есть, поскольку PySide/PyQt завершает C++.

Было очень ясно, что не так с вашим кодом, как только вы отправили сообщение об ошибке - пожалуйста, постарайтесь не забывать включать такие вещи в будущем, чтобы сохранить чье-то время.

Как это работает?