2013-08-27 34 views
1

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

下面是代码:

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_()) 

回答

1

在你__init__方法添加打印动作:

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)