Sfoglia il codice sorgente

first test of print to pdf, aouch :(

Bachir Soussi Chiadmi 7 anni fa
parent
commit
4db47a9259
2 ha cambiato i file con 45 aggiunte e 9 eliminazioni
  1. 35 9
      classes/design.py
  2. 10 0
      classes/mainwindow.py

+ 35 - 9
classes/design.py

@@ -9,6 +9,7 @@ from PyQt5.QtGui import QKeySequence, QFont
 from PyQt5.QtWidgets import QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QSplitter, QPlainTextEdit, QShortcut, QPushButton, QCheckBox
 from PyQt5.QtWebKit import QWebSettings
 from PyQt5.QtWebKitWidgets import QWebView, QWebInspector
+from PyQt5.QtPrintSupport import QPrintPreviewDialog, QPrinter
 
 
 class WebkitView(QWebView):
@@ -19,6 +20,19 @@ class WebkitView(QWebView):
       self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
       # self.settings().setAttribute(QWebSettings.PluginsEnabled, True)
 
+      self.printer = QPrinter()
+      self.printer.setPageSize(QPrinter.A4)
+      self.printer.setOrientation(QPrinter.Portrait)
+      self.printer.setPageMargins(10,10,10,10,QPrinter.Millimeter)
+      self.setFixedWidth(1000)
+
+
+   def onPrint(self):
+      dialog = QPrintPreviewDialog(self.printer)
+      # dialog.setWindowState(Qt.WindowMaximized)
+      dialog.paintRequested.connect(self.print_)
+      # dialog.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint | Qt.WindowContextHelpButtonHint)
+      dialog.exec()
 
 class WebkitInspector(QWebInspector):
    def __init__(self, parent, webkitview):
@@ -28,9 +42,9 @@ class WebkitInspector(QWebInspector):
       self.showMaximized()
       # TODO: webkitinspector is disappearing when chaging tabs
 
-class WebViewOptions(QWidget):
+class WebViewToolBar(QWidget):
    def __init__(self, parent):
-      super(WebViewOptions, self).__init__(parent)
+      super(WebViewToolBar, self).__init__(parent)
       self.parent = parent
       self.hbox = QHBoxLayout()
       self.hbox.setContentsMargins(0,0,0,0)
@@ -72,11 +86,14 @@ class WebViewOptions(QWidget):
       self.reload.clicked.connect(self.onReload)
       self.hbox.addWidget(self.reload)
 
-      self.setLayout(self.hbox)
+      self.imprim = QPushButton("&Print", self)
+      # self.imprim.setShortcut('Ctrl+Shift+r')
+      # TODO: how to define same shortcut in different places
+      # self.imprim.setIcon(Icon(ico)))
+      self.imprim.clicked.connect(self.onPrint)
+      self.hbox.addWidget(self.imprim)
 
-   def onReload(self):
-      print("onReload")
-      # self.parent.webkitview.
+      self.setLayout(self.hbox)
 
    def onPreview(self):
       print('onPreview')
@@ -90,6 +107,16 @@ class WebViewOptions(QWidget):
    def onSpread(self):
       print('onSpread')
 
+
+   def onReload(self):
+      print("onReload")
+      # self.parent.webkitview.
+
+   def onPrint(self):
+      print("onReload")
+      self.parent.webkitview.onPrint()
+
+
 class CodeEditor(QPlainTextEdit):
    def __init__(self, core, tabs, file=None):
       super(CodeEditor, self).__init__()
@@ -181,7 +208,6 @@ class DesignStack(QWidget):
       self.webview.setLayout(self.webview.vbox)
       self.webview.vbox.setContentsMargins(0,0,0,0)
 
-
       self.webkitview = WebkitView(self, core.server.port)
 
       self.webkitinspector = WebkitInspector(self, self.webkitview)
@@ -191,8 +217,8 @@ class DesignStack(QWidget):
       shortcut.activated.connect(self.toggleInspector)
       self.webkitinspector.setVisible(False)
 
-      self.webviewoptions = WebViewOptions(self)
-      self.webview.vbox.addWidget(self.webviewoptions)
+      self.webviewtoolbar = WebViewToolBar(self)
+      self.webview.vbox.addWidget(self.webviewtoolbar)
 
       self.vsplitter = QSplitter(QtCore.Qt.Vertical)
       self.vsplitter.addWidget(self.webkitview)

+ 10 - 0
classes/mainwindow.py

@@ -54,6 +54,10 @@ class MainWindow(QMainWindow):
       self.save_action.setShortcut("Ctrl+Shift+s")
       file.addAction(self.save_action)
 
+      prnt = QAction("&Print",self)
+      prnt.setShortcut("Ctrl+p")
+      file.addAction(prnt)
+
       quit = QAction("&Quit",self)
       quit.setShortcut("Ctrl+q")
       file.addAction(quit)
@@ -105,6 +109,8 @@ class MainWindow(QMainWindow):
          self.openprojectdialogue()
       elif q.text() == "&Save Project as":
          self.saveprojectdialogue()
+      elif q.text() == "&Print":
+         self.imprim()
       elif q.text() == "&Quit":
          self.quit()
 
@@ -179,6 +185,10 @@ class MainWindow(QMainWindow):
          print('Exception', e)
          pass
 
+   def imprim(self):
+      print('imprim')
+      self.designstack.webkitview.onPrint()
+
    def quit(self):
       print("Quit")
       if self.core.tempcwd: