1

我有一个使用 PySide Qt 用 python 编写的浏览器应用程序。但现在我想在工具栏中添加一个按钮来打印网站。我该怎么做呢?因为 CTRL + P 在应用程序中不起作用。

这是代码:

import sys
from PySide import QtCore, QtGui, QtWebKit, QtHelp, QtNetwork

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        Action1 = QtGui.QAction('Google', self)
        Action1.setShortcut('Ctrl+M')
        Action1.triggered.connect(self.load_message)
        self.toolbar1 = self.addToolBar('Google')
        self.toolbar1.addAction(Action1)

        Action2 = QtGui.QAction('Yahoo', self)
        Action2.setShortcut('Ctrl+H') 
        Action2.triggered.connect(self.load_list)
        self.toolbar2 = self.addToolBar('Yahoo')
        self.toolbar2.addAction(Action2)

        exitAction = QtGui.QAction('Exit', self)
        exitAction.setShortcut('Ctrl+Q') 
        exitAction.triggered.connect(self.on_exit)
        self.toolbar3 = self.addToolBar('Exit')
        self.toolbar3.addAction(exitAction)

        self.resize(750, 750)
        self.setWindowTitle('Browser')

        self.web = QtWebKit.QWebView(self)
        self.web.load(QtCore.QUrl('http://www.google.com'))
        self.setCentralWidget(self.web)

    def on_exit(self):
        QtGui.qApp.quit

    def load_message(self):
        self.web.load(QtCore.QUrl('http://www.google.com'))

    def load_list(self):
        self.web.load(QtCore.QUrl('http://www.yahoo.com'))

app = QtGui.QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon('myicon.ico'))
main_window = MainWindow()
main_window.show()    
sys.exit(app.exec_())
4

1 回答 1

1

在您的__init__方法中添加一个 Print 操作:

printAction = QtGui.QAction('Print', self)
printAction.setShortcut('Ctrl+P') 
printAction.triggered.connect(self.do_print)
self.toolbar4 = self.addToolBar('Print')
self.toolbar4.addAction(printAction)

并创建一个do_print方法:

def do_print(self):
    p = QtGui.QPrinter()
    p.setPaperSize(QtGui.QPrinter.A4)
    p.setFullPage(True)
    p.setResolution(300)
    p.setOrientation(QtGui.QPrinter.Portrait)
    p.setOutputFileName('D:\\test.pdf')
    self.web.print_(p)

这将打印到一个文件D:\test.pdf

要以不同方式配置您的打印机,请参阅QPrinter文档。此外,如果您想要打印预览对话框,请参阅QPrintPreviewDialog文档。

如果您想要一个标准的打印对话框,请使用:

def do_print(self):
    p = QtGui.QPrinter()
    dialog = QtGui.QPrintDialog(p)
    dialog.exec_()
    self.web.print_(p)
于 2013-08-27T09:28:29.593 回答