def keyPressEvent(self, event): if self.completer and self.completer.popup().isVisible(): if event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return, QtCore.Qt.Key_Escape, QtCore.Qt.Key_Tab, QtCore.Qt.Key_Backtab): event.ignore() return # has ctrl-space been pressed?? isShortcut = (event.modifiers() == QtCore.Qt.ControlModifier and event.key() == QtCore.Qt.Key_Space) if (not self.completer or not isShortcut): QPlainTextEdit.keyPressEvent(self, event) # ctrl or shift key on it's own?? ctrlOrShift = event.modifiers() in (QtCore.Qt.ControlModifier, QtCore.Qt.ShiftModifier) if ctrlOrShift and event.text() == '': # ctrl or shift key on it's own return # end of word eow = "~!@#$%^&*()_+{}|:\"<>?,./;'[]\\-=" hasModifier = ((event.modifiers() != QtCore.Qt.NoModifier) and not ctrlOrShift) completionPrefix = self.textUnderCursor() if (not isShortcut and (hasModifier or event.text() == '' or len(completionPrefix) < 3 or event.text()[:-1] in eow)): self.completer.popup().hide() return if (completionPrefix != self.completer.completionPrefix()): self.completer.setCompletionPrefix(completionPrefix) popup = self.completer.popup() popup.setCurrentIndex(self.completer.completionModel().index(0, 0)) cr = self.cursorRect() cr.setWidth( self.completer.popup().sizeHintForColumn(0) + self.completer.popup().verticalScrollBar().sizeHint().width()) # popup it up! self.completer.complete(cr)
def ui(self): super(InfoMessage, self).ui() self.setMaximumHeight(150) info_icon = resources.icon('info') self._expandable_frame = expandables.ExpandableFrame(icon=info_icon, parent=self) self._expandable_frame.setFrameStyle(QFrame.StyledPanel | QFrame.Raised) expandable_layout = layouts.HorizontalLayout(margins=(2, 2, 2, 2)) texts_layout = layouts.HorizontalLayout(spacing=0, margins=(0, 0, 0, 0)) self._description_text = QPlainTextEdit(parent=self) self._description_text.setReadOnly(True) self._description_text.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) self._description_text.setFocusPolicy(Qt.NoFocus) self._description_text.setFrameShape(QFrame.NoFrame) self._instructions_widget = QWidget() instructions_layout = layouts.VerticalLayout(spacing=2, margins=(0, 0, 0, 0)) self._instructions_widget.setLayout(instructions_layout) self._instructions_text = QTextEdit(parent=self) self._instructions_text.setReadOnly(True) self._instructions_text.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) self._instructions_text.setFocusPolicy(Qt.NoFocus) self._instructions_text.setFrameShape(QFrame.NoFrame) self._instructions_widget.setVisible(False) # self._instructions_text.insertHtml("<ul><li>text 1</li><li>text 2</li><li>text 3</li></ul> <br />") instructions_layout.addWidget(dividers.Divider('Instructions')) instructions_layout.addWidget(self._instructions_text) texts_layout.addWidget(self._description_text) texts_layout.addWidget(self._instructions_widget) content_layout = layouts.VerticalLayout() content_layout.addLayout(texts_layout) expandable_layout.addLayout(content_layout) self._expandable_frame.addLayout(expandable_layout) self.main_layout.addWidget(self._expandable_frame)
class _ReportingWindow(QDialog): def __init__(self, name, report, parent=None): QDialog.__init__(self, parent) icon = self.style().standardIcon(QStyle.SP_MessageBoxCritical) self.setWindowTitle('Error reporting') self.setWindowIcon(icon) try: font = QFontDatabase().systemFont(QFontDatabase.FixedFont) except AttributeError as e: font = QFont() font.setStyleHint(QFont.TypeWriter) self.text = QPlainTextEdit() self.text.setFont(font) self.text.setReadOnly(True) self.text.setLineWrapMode(QPlainTextEdit.NoWrap) self.text.setPlainText(report) TracebackHighlighter(self.text.document()) icon_label = QLabel() icon_label.setPixmap(icon.pixmap(ICON_SIZE, ICON_SIZE)) label = QLabel("{} error !".format(name)) label.setFont(QFont('default', pointSize=14)) button_copy = QPushButton('Copy to clipboard') button_copy.clicked.connect(self._copy) layout = QGridLayout(self) layout.addWidget(icon_label, 0, 0) layout.addWidget(label, 0, 1) layout.addWidget(self.text, 1, 0, 1, 2) layout.addWidget(button_copy, 2, 0, 1, 2) layout.setColumnStretch(1, 100) self.setModal(True) self.resize(600, 400) def _copy(self): clipboard = QApplication.clipboard() clipboard.setText('```\n' + self.text.toPlainText() + '\n```')
def new_tab(self, title, text): new_editor = QPlainTextEdit() new_editor.setFont(self._font) new_editor.setPlainText(text) TemplateHighlighter(new_editor.document()) new_editor.textChanged.connect(self._text_changed) self._widgets_indexes[new_editor] = self.count() self.addTab(new_editor, title)
def __init__(self, parent=None): super().__init__(parent) self.launcher = Launcher() self.launcher.standard_output_signal.connect(self.handle_stdout) self.launcher.standard_error_signal.connect(self.handle_stderr) self.log_edit = QPlainTextEdit(readOnly=True) self.launcher_view = QTreeView() splitter = QSplitter(orientation=Qt.Vertical) splitter.addWidget(self.launcher_view) splitter.addWidget(self.log_edit) splitter.setSizes([10, 1]) self.setCentralWidget(splitter) self.resize(640, 480) filename = os.path.join(CURRENT_DIR, "quickcontrols2/gallery/main.py") self.start(filename, "PySide2")
def ui(self): super(ToolsetHelpWidget, self).ui() self.setFrameStyle(QFrame.StyledPanel | QFrame.Plain) self._image_label = label.BaseLabel(parent=self) self._title_label = label.BaseLabel(parent=self).strong() self._description_text = QPlainTextEdit(parent=self) # self._description_text.setFrameShape(QFrame.NoFrame) self._description_text.setMinimumWidth(200) self._description_text.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._gif_label = gif.GifLabel(parent=self) self._gif_label.set_size(256, 256) self.main_layout.addWidget(self._title_label) self.main_layout.addWidget(dividers.Divider()) body_layout = layouts.HorizontalLayout(spacing=0, margins=(0, 0, 0, 0)) body_layout.addWidget(self._description_text) body_layout.addWidget(self._gif_label) body_layout.addWidget(self._image_label) body_layout.addStretch() self.main_layout.addLayout(body_layout)
class ToolsetHelpWidget(base.BaseFrame, object): def __init__(self, parent=None): super(ToolsetHelpWidget, self).__init__(parent=parent) def ui(self): super(ToolsetHelpWidget, self).ui() self.setFrameStyle(QFrame.StyledPanel | QFrame.Plain) self._image_label = label.BaseLabel(parent=self) self._title_label = label.BaseLabel(parent=self).strong() self._description_text = QPlainTextEdit(parent=self) # self._description_text.setFrameShape(QFrame.NoFrame) self._description_text.setMinimumWidth(200) self._description_text.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._gif_label = gif.GifLabel(parent=self) self._gif_label.set_size(256, 256) self.main_layout.addWidget(self._title_label) self.main_layout.addWidget(dividers.Divider()) body_layout = layouts.HorizontalLayout(spacing=0, margins=(0, 0, 0, 0)) body_layout.addWidget(self._description_text) body_layout.addWidget(self._gif_label) body_layout.addWidget(self._image_label) body_layout.addStretch() self.main_layout.addLayout(body_layout) def set_title(self, title): self._title_label.setText(str(title)) def set_description(self, description): self._description_text.setPlainText(str(description)) def set_image(self, image_file): if not image_file or not os.path.isfile(image_file): return self._image_label.setPixmap( QPixmap(image_file).scaled(QSize(256, 256), Qt.KeepAspectRatio)) self._image_label.setVisible(True) self._gif_label.setVisible(False) def set_gif(self, gif_file): if not gif_file or not os.path.isfile(gif_file): return self._gif_label.set_file(gif_file) self._gif_label.setVisible(True) self._image_label.setVisible(False)
def focusInEvent(self, event): if self.completer: self.completer.setWidget(self) QPlainTextEdit.focusInEvent(self, event)
def echo(self, data_dict, reply_dict): reply_dict['result'] = data_dict['text'] reply_dict['success'] = True def set_title(self, data_dict, reply_dict): self._window.setWindowTitle(data_dict['title']) reply_dict['result'] = True reply_dict['success'] = True def sleep(self, data_dict, reply_dict): for i in range(6): logger.info('Sleeping {}'.format(i)) time.sleep(1) reply_dict['result'] = True reply_dict['success'] = True if __name__ == '__main__': from Qt.QtWidgets import QApplication, QDialog, QPlainTextEdit app = QApplication(sys.argv) window = QDialog() window.setWindowTitle('Example Base') window.setFixedSize(240, 150) QPlainTextEdit(window) server = ExampleServer(window) window.show() app.exec_()
class InfoMessage(base.BaseWidget, object): def __init__(self, name='', description='', instructions='', parent=None): self._name = '' self._description = '' self._instructions = instructions super(InfoMessage, self).__init__(parent) self.setAttribute(Qt.WA_StyledBackground) self.theme_type = message.MessageTypes.INFO self.style().polish(self) self.name = name self.description = description self.instructions = instructions # ================================================================================================================= # PROPERTIES # ================================================================================================================= def _get_name(self): return self._name def _set_name(self, name): self._name = str(name) self._expandable_frame.set_title(self._name) def _get_description(self): return self._description def _set_description(self, text): self._description = str(text) self._description_text.setPlainText(self._description) def _get_instructions(self): return self._instructions def _set_instructions(self, instructions): self._instructions = str(instructions) self._instructions_text.clear() self._instructions_text.insertHtml(instructions) self._instructions_widget.setVisible(bool(instructions)) name = Property(str, _get_name, _set_name) description = Property(str, _get_description, _set_description) instructions = Property(str, _get_instructions, _set_instructions) # ================================================================================================================= # OVERRIDES # ================================================================================================================= def ui(self): super(InfoMessage, self).ui() self.setMaximumHeight(150) info_icon = resources.icon('info') self._expandable_frame = expandables.ExpandableFrame(icon=info_icon, parent=self) self._expandable_frame.setFrameStyle(QFrame.StyledPanel | QFrame.Raised) expandable_layout = layouts.HorizontalLayout(margins=(2, 2, 2, 2)) texts_layout = layouts.HorizontalLayout(spacing=0, margins=(0, 0, 0, 0)) self._description_text = QPlainTextEdit(parent=self) self._description_text.setReadOnly(True) self._description_text.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) self._description_text.setFocusPolicy(Qt.NoFocus) self._description_text.setFrameShape(QFrame.NoFrame) self._instructions_widget = QWidget() instructions_layout = layouts.VerticalLayout(spacing=2, margins=(0, 0, 0, 0)) self._instructions_widget.setLayout(instructions_layout) self._instructions_text = QTextEdit(parent=self) self._instructions_text.setReadOnly(True) self._instructions_text.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) self._instructions_text.setFocusPolicy(Qt.NoFocus) self._instructions_text.setFrameShape(QFrame.NoFrame) self._instructions_widget.setVisible(False) # self._instructions_text.insertHtml("<ul><li>text 1</li><li>text 2</li><li>text 3</li></ul> <br />") instructions_layout.addWidget(dividers.Divider('Instructions')) instructions_layout.addWidget(self._instructions_text) texts_layout.addWidget(self._description_text) texts_layout.addWidget(self._instructions_widget) content_layout = layouts.VerticalLayout() content_layout.addLayout(texts_layout) expandable_layout.addLayout(content_layout) self._expandable_frame.addLayout(expandable_layout) self.main_layout.addWidget(self._expandable_frame)