def __init__(self, parent, history): super().__init__(parent=parent) self.setWindowTitle("History") layout = QVBoxLayout() text = QPlainTextEdit() font = QFont() font.setFamily("monospace") font.setStyleHint(QFont.Monospace) text.setFont(font) highlighter = PythonHighlighter(text.document()) # noqa: F841 text.setReadOnly(True) text.setPlainText(history) layout.addWidget(text) buttonbox = QDialogButtonBox(QDialogButtonBox.Ok) clipboardbutton = QPushButton("Copy to clipboard") buttonbox.addButton(clipboardbutton, QDialogButtonBox.ActionRole) clipboard = QGuiApplication.clipboard() clipboardbutton.clicked.connect( lambda: clipboard.setText(history + "\n")) layout.addWidget(buttonbox) self.setLayout(layout) buttonbox.accepted.connect(self.accept) self.resize(700, 500)
class MainWindow(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) self._highlighter = Highlighter() self.setup_file_menu() self.setup_editor() self.setCentralWidget(self._editor) self.setWindowTitle(self.tr("Syntax Highlighter")) def new_file(self): self._editor.clear() def open_file(self, path=""): file_name = path if not file_name: file_name, _ = QFileDialog.getOpenFileName( self, self.tr("Open File"), "", "qmake Files (*.pro *.prf *.pri)") if file_name: inFile = QFile(file_name) if inFile.open(QFile.ReadOnly | QFile.Text): stream = QTextStream(inFile) self._editor.setPlainText(stream.readAll()) def setup_editor(self): variable_format = QTextCharFormat() variable_format.setFontWeight(QFont.Bold) variable_format.setForeground(Qt.blue) self._highlighter.add_mapping("\\b[A-Z_]+\\b", variable_format) single_line_comment_format = QTextCharFormat() single_line_comment_format.setBackground(QColor("#77ff77")) self._highlighter.add_mapping("#[^\n]*", single_line_comment_format) quotation_format = QTextCharFormat() quotation_format.setBackground(Qt.cyan) quotation_format.setForeground(Qt.blue) self._highlighter.add_mapping("\".*\"", quotation_format) function_format = QTextCharFormat() function_format.setFontItalic(True) function_format.setForeground(Qt.blue) self._highlighter.add_mapping("\\b[a-z0-9_]+\\(.*\\)", function_format) font = QFont() font.setFamily("Courier") font.setFixedPitch(True) font.setPointSize(10) self._editor = QPlainTextEdit() self._editor.setFont(font) self._highlighter.setDocument(self._editor.document()) def setup_file_menu(self): file_menu = self.menuBar().addMenu(self.tr("&File")) new_file_act = file_menu.addAction(self.tr("&New...")) new_file_act.setShortcut(QKeySequence(QKeySequence.New)) new_file_act.triggered.connect(self.new_file) open_file_act = file_menu.addAction(self.tr("&Open...")) open_file_act.setShortcut(QKeySequence(QKeySequence.Open)) open_file_act.triggered.connect(self.open_file) quit_act = file_menu.addAction(self.tr("E&xit")) quit_act.setShortcut(QKeySequence(QKeySequence.Quit)) quit_act.triggered.connect(self.close) help_menu = self.menuBar().addMenu("&Help") help_menu.addAction("About &Qt", qApp.aboutQt)