def getWidgetGeneralInfoStoryLine(self, parent, scale, value): if value: widget_value = QPlainTextEdit(parent) widget_value.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) widget_value.setFont( QFont(PANEL_FONT_TYPE, PANEL_FONT_SIZE * scale, weight=QFont.Normal)) widget_value.setReadOnly(True) widget_value.setMinimumHeight((PANEL_FONT_SIZE + 3) * scale) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) widget_value.setSizePolicy(sizePolicy) [widget_value.appendPlainText(line) for line in value.split('\\n')] widget_value.moveCursor(QTextCursor.Start) # - eliminate the padding from the top - # widget_value.document().setDocumentMargin(0) widget_value.setStyleSheet( "QPlainTextEdit {padding-left:5px; padding-top:0px; border:0px;}" ) return widget_value return None
class ExperimentConsoleOutput(QWidget): def __init__(self): # super().__init__() super(ExperimentConsoleOutput, self).__init__() # Create text entry box self.__plainTextWgt = QPlainTextEdit() # Change font, colour of text entry box self.__plainTextWgt.setStyleSheet( """QPlainTextEdit {background-color: #333; color: #00FF00; text-decoration: underline; font-family: Courier;}""") self.__mainLayout = QVBoxLayout(self) # "Central Widget" expands to fill all available space self.__mainLayout.addWidget(self.__plainTextWgt) # Print text to console whenever it changes self.__plainTextWgt.textChanged.connect(lambda: print(self.__plainTextWgt.document().toPlainText())) # Set initial value of text self.__plainTextWgt.document().setPlainText("Experiment log will print here") # self.run() def qPlainTextWgt(self): return self.__plainTextWgt def run(self): try: self.show() except Exception as e: print("[", dt.datetime.now(), ", LOG] msg: ", e)
def __init__(self, window:QMainWindow, system_info): super().__init__() v_box = QVBoxLayout() h_buttons = QHBoxLayout() button_style = "background-color: #006699; padding-left:20px; padding-right:20px; padding-top:5px; padding-bottom:5px;" copy_pastable_json = json.dumps(system_info, indent=2) website_link = str(base64.b64decode("aHR0cHM6Ly90YXJhbGxvLndlZWVvcGVuLml0L2J1bGsvYWRkCg=="), "utf-8") self.clipboard_button = QPushButton("Copy to clipboard") self.clipboard_button.setStyleSheet(button_style) self.clipboard_button.clicked.connect(lambda: QApplication.clipboard().setText(copy_pastable_json)) self.clipboard_button.clicked.connect(lambda: self.spawn_notification("Copied to clipboard")) self.website_button = QPushButton("Go to T.A.R.A.L.L.O.") self.website_button.setStyleSheet(button_style) self.website_button.clicked.connect(lambda: sp.Popen(["xdg-open", website_link])) plain_text = QPlainTextEdit() plain_text.document().setPlainText(copy_pastable_json) plain_text.setStyleSheet("background-color:#333333; color:#bbbbbb") plain_text.setReadOnly(True) plain_text.setMinimumSize(plain_text.width(), plain_text.height()) # prevent from resizing too much back_button = QPushButton("Go back") back_button.clicked.connect(lambda: self.restore_previous_window(window, system_info)) h_buttons.addWidget(self.clipboard_button, alignment=Qt.AlignCenter) h_buttons.addWidget(self.website_button, alignment=Qt.AlignCenter) v_box.addLayout(h_buttons) v_box.addWidget(plain_text) v_box.addWidget(back_button, alignment=Qt.AlignCenter) self.setLayout(v_box)
def show_info_dialog(caption, parent, initial_text): dialog = QDialog(parent) dialog.setWindowTitle(caption) # Create OK and Cancel buttons in a horizontal box. ok_button = QPushButton("OK") ok_button.setDefault(True) ok_button.clicked.connect(dialog.accept) cancel_button = QPushButton("Cancel") cancel_button.setDefault(False) cancel_button.clicked.connect(dialog.reject) hbox = QHBoxLayout() hbox.addWidget(cancel_button, 0) hbox.addStretch() hbox.addWidget(ok_button, 0) # Lay out a Plain Text Edit above the buttons. vbox = QVBoxLayout() pt_editor = QPlainTextEdit() pt_editor.document().setPlainText(initial_text) vbox.addWidget(pt_editor, 1) vbox.addLayout(hbox, 0) dialog.setLayout(vbox) result = dialog.exec_() if result: return pt_editor.document().toPlainText() else: return None
def all(): app = QApplication(sys.argv) #qanda = QandA() window = QWidget() window.resize(1000, 1000) edit_button = QPushButton() finish_button = QPushButton() finish_button.setText('Finish') #Create text entry box text_edit_widget = QPlainTextEdit() #Change font, color of text entry box text_edit_widget.setStyleSheet("""QPlainTextEdit {background-color:#333; color: #00FF00; text-decoration: underline; font-family: Courier;}""") layout = QVBoxLayout() layout.addWidget(text_edit_widget) layout.addWidget(finish_button) #"Central Widget" expands to fill all available space window.setLayout(layout) # Set initial value of text con = sqlite3.connect('QandA.db') c = con.cursor() question_list = '' for row in c.execute("select * from qanda"): question_list = question_list + row[1] + '\t' + row[2] + '\n\n' text_edit_widget.document().setPlainText(question_list) finish_button.clicked.connect(lambda: QCoreApplication.instance().quit()) window.show() sys.exit(app.exec_())
def show_info_dialog( caption, parent, initial_text ): dialog = QDialog( parent ) dialog.setWindowTitle( caption ) # Create OK and Cancel buttons in a horizontal box. ok_button = QPushButton("OK") ok_button.setDefault(True) ok_button.clicked.connect(dialog.accept) cancel_button = QPushButton("Cancel") cancel_button.setDefault(False) cancel_button.clicked.connect(dialog.reject) hbox = QHBoxLayout() hbox.addWidget(cancel_button,0) hbox.addStretch() hbox.addWidget(ok_button,0) # Lay out a Plain Text Edit above the buttons. vbox = QVBoxLayout() pt_editor = QPlainTextEdit() pt_editor.document().setPlainText( initial_text ) vbox.addWidget(pt_editor,1) vbox.addLayout(hbox,0) dialog.setLayout(vbox) result = dialog.exec_() if result : return pt_editor.document().toPlainText() else : return None
def get_text_edit_row_height(editor: QtWidgets.QPlainTextEdit, rows: int) -> int: metrics = QtGui.QFontMetrics(editor.document().defaultFont()) margins = editor.contentsMargins() return (metrics.lineSpacing() * rows + (editor.document().documentMargin() + editor.frameWidth()) * 2 + margins.top() + margins.bottom() + 1)
def __init__(self, window: QMainWindow, system_info): super().__init__() v_box = QVBoxLayout() h_buttons = QHBoxLayout() s_buttons = QHBoxLayout() button_style = "background-color: #006699; padding-left:20px; padding-right:20px; padding-top:5px; padding-bottom:5px;" copy_pastable_json = json.dumps(system_info, indent=2) self.back_button = QPushButton("Go back") self.back_button.setStyleSheet( "padding-left:20px; padding-right:20px; padding-top:5px; padding-bottom:5px;" ) self.back_button.clicked.connect( lambda: self.restore_previous_window(window, system_info)) h_buttons.addWidget(self.back_button, alignment=Qt.AlignLeft) plain_text = QPlainTextEdit() plain_text.document().setPlainText(copy_pastable_json) plain_text.setStyleSheet("background-color:#333333; color:#bbbbbb") plain_text.setReadOnly(True) plain_text.setMinimumSize(plain_text.width(), plain_text.height()) # prevent from resizing too much layout_grid = QGridLayout() self.lbl_manual = QLabel("Manual") layout_grid.addWidget(self.lbl_manual, 0, 1, Qt.AlignCenter) self.clipboard_button = QPushButton("Copy to clipboard") self.clipboard_button.setStyleSheet(button_style) self.clipboard_button.clicked.connect( lambda: QApplication.clipboard().setText(copy_pastable_json)) self.clipboard_button.clicked.connect( lambda: self.spawn_notification("Copied to clipboard")) layout_grid.addWidget(self.clipboard_button, 1, 1, Qt.AlignCenter) self.website_button = QPushButton("Go to T.A.R.A.L.L.O.") self.website_button.setStyleSheet(button_style) self.website_button.clicked.connect( lambda: _go_to_tarallo("/bulk/add")) layout_grid.addWidget(self.website_button, 2, 1, Qt.AlignCenter) self.lbl_automatic = QLabel("Automatic") layout_grid.addWidget(self.lbl_automatic, 0, 0, Qt.AlignCenter) self.tarallo_data = QPushButton("Send data to T.A.R.A.L.L.O.") self.tarallo_data.setStyleSheet(button_style) self.tarallo_data.clicked.connect(lambda: self.send_data(system_info)) layout_grid.addWidget(self.tarallo_data, 1, 0, -1, 1, Qt.AlignCenter) v_box.addLayout(h_buttons) v_box.addWidget(plain_text) v_box.addLayout(layout_grid) self.setLayout(v_box)
class GenericControlPanel(AbstractControlPanel): autoPilotRebootSignal = pyqtSignal() textMessageConsole = None __updateTextConsoleSignal = pyqtSignal(object) def __init__(self, parent=None): super().__init__(parent) l = QGridLayout() row = 0 self.rebootAutoPilotButton = QPushButton('Reboot AutoPilot') self.rebootAutoPilotButton.setStyleSheet('background-color: red') self.rebootAutoPilotButton.clicked.connect(self.__rebootAutoPilot) l.addWidget(self.rebootAutoPilotButton, row, 0, 1, 1, Qt.AlignLeft) row += 1 self.textMessageConsole = QPlainTextEdit(self) self.textMessageConsole.setReadOnly(True) self.textMessageConsole.document().setMaximumBlockCount(100) self.__updateTextConsoleSignal.connect(self.__textMessagePrint) l.addWidget(self.textMessageConsole, row, 0, 5, 5) self.setLayout(l) def tabName(self): return 'Mavlink' def registerMavlinkMessageListeners(self): return ['STATUSTEXT'] def mavlinkMessageReceived(self, msg): if msg.get_type() == 'STATUSTEXT': self.__updateTextConsoleSignal.emit(msg.text) def __textMessagePrint(self, msg: str): self.textMessageConsole.insertPlainText('{}: {}'.format( time.strftime('%H:%M:%S', time.localtime()), msg)) bar = self.textMessageConsole.verticalScrollBar() bar.setValue(bar.maximum()) def __rebootAutoPilot(self): if self.isConnected: cfm = QMessageBox.question(self.window(), 'Reboot AutoPilot', 'The autopilot will reboot, continue?', QMessageBox.Yes, QMessageBox.No) if cfm == QMessageBox.Yes: msg = mavlink.MAVLink_command_long_message( 255, 0, mavlink.MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN, 0, 1, 0, 0, 0, 0, 0, 0) self.autoPilotRebootSignal.emit( ) # signal other component the reboot event self.mavlinkTxSignal.emit(msg)
class Widget(QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) self._lineedit = QLineEdit(textChanged=self.onTextChanged) regex_validator = QRegExpValidator(QRegExp(r"[0-9 ]+")) self._lineedit.setValidator(regex_validator) self._plaintextedit = QPlainTextEdit() self._highlighter = SyntaxHighlighter(self._plaintextedit.document()) lay = QVBoxLayout(self) lay.addWidget(self._lineedit) lay.addWidget(self._plaintextedit) for i in range(10): self._plaintextedit.appendPlainText("line %d" % i) self.resize(720, 720) @pyqtSlot(str) def onTextChanged(self, text): fmt = QTextCharFormat() fmt.setBackground(QColor("yellow")) self._highlighter.clear_highlight() for e in text.split(): line = int(e) self._highlighter.highlight_line(line, fmt)
class Example(QMainWindow): def __init__(self): super().__init__() self.text_editor = QPlainTextEdit() self.syntax = PythonHighlighter(self.text_editor.document()) self.init_ui() def init_ui(self): background_color = QColor() background_color.setNamedColor('#282821') color_palette = self.text_editor.palette() color_palette.setColor(QPalette.Text, Qt.white) color_palette.setColor(QPalette.Base, background_color) self.text_editor.setPalette(color_palette) default_font = self.text_editor.font() default_font.setPointSize(9) self.text_editor.setFont(default_font) self.setWindowTitle('Example') self.setCentralWidget(self.text_editor) self.setGeometry(500, 500, 500, 500) self.show()
class GalleryDownloaderUrlExtracter(QWidget): url_emit = pyqtSignal(str) def __init__(self, parent=None): super().__init__(parent, flags=Qt.Window|Qt.WindowStaysOnTopHint) self.main_layout = QVBoxLayout(self) self.text_area = QPlainTextEdit(self) self.text_area.setPlaceholderText("URLs are seperated by a newline") self.main_layout.addWidget(self.text_area) self.text_area.setWordWrapMode(QTextOption.NoWrap) add_to_queue = QPushButton('Add to queue') add_to_queue.adjustSize() add_to_queue.setFixedWidth(add_to_queue.width()) add_to_queue.clicked.connect(self.add_to_queue) self.main_layout.addWidget(add_to_queue, 0, Qt.AlignRight) self.setWindowIcon(QIcon(app_constants.APP_ICO_PATH)) self.show() def add_to_queue(self): txt = self.text_area.document().toPlainText() urls = txt.split('\n') for u in urls: if u: self.url_emit.emit(u) self.close()
class GalleryDownloaderUrlExtracter(QWidget): url_emit = pyqtSignal(str) def __init__(self, parent=None): super().__init__(parent, flags=Qt.Window | Qt.WindowStaysOnTopHint) self.main_layout = QVBoxLayout(self) self.text_area = QPlainTextEdit(self) self.text_area.setPlaceholderText("URLs are seperated by a newline") self.main_layout.addWidget(self.text_area) self.text_area.setWordWrapMode(QTextOption.NoWrap) add_to_queue = QPushButton('Add to queue') add_to_queue.adjustSize() add_to_queue.setFixedWidth(add_to_queue.width()) add_to_queue.clicked.connect(self.add_to_queue) self.main_layout.addWidget(add_to_queue, 0, Qt.AlignRight) self.setWindowIcon(QIcon(app_constants.APP_ICO_PATH)) self.show() def add_to_queue(self): txt = self.text_area.document().toPlainText() urls = txt.split('\n') for u in urls: if u: self.url_emit.emit(u) self.close()
class MyW(QWidget): def __init__(self): super().__init__() self.setWindowTitle('nyak1') grid = QGridLayout() self.setLayout(grid) self.editor = QPlainTextEdit() self.editor.setMinimumSize(100,100) self.check = QPushButton("check syntax") self.lb = QPlainTextEdit() self.lb.setStyleSheet("QLabel {" "border-style: solid;" "border-width: 1px;" "border-color: black; " "}") self.editor.setMinimumSize(40,100) grid.addWidget(self.editor, 0, 0, 2, 1) grid.addWidget(self.check, 0, 1) grid.addWidget(self.lb, 1, 1) font = QFont() font.setPointSize(12) #self.editor.setFont(font) self.highlight = HL_Syntax1.PythonHighlighter(self.editor.document()) self.resize(700, 400) # Загрузите что-нибудь (например, editor_2.py) в редактор для демонстрации. infile = open('D:\Py_try\EZ_machining\examples\doc1.txt', 'r') self.editor.setPlainText(infile.read())
def create_stdout_box( self) -> Tuple[QGroupBox, QPlainTextEdit, QSyntaxHighlighter]: gbox = QGroupBox('Program output') vbox = QVBoxLayout() gbox.setLayout(vbox) text_area = QPlainTextEdit() vbox.addWidget(text_area) text_area.setReadOnly(True) text_area.setWordWrapMode(QTextOption.NoWrap) palette = text_area.palette() # type: QPalette palette.setColor(QPalette.Active, QPalette.Base, QColor('#1E1E1E')) palette.setColor(QPalette.Inactive, QPalette.Base, QColor('#1E1E1E')) text_area.setPalette(palette) font = QFont('Monospace', 9) font.setStyleHint(QFont.TypeWriter) fmt = QTextCharFormat() fmt.setFont(font) fmt.setForeground(QColor(212, 212, 212)) text_area.setCurrentCharFormat(fmt) doc = text_area.document() highlighter = LogSeverityHighlighter(doc) return gbox, text_area, highlighter
def cv2Info(self, cv2): layout = QVBoxLayout() info = cv2.getBuildInformation() text = QPlainTextEdit() fixedFont = QFontDatabase.systemFont(QFontDatabase.FixedFont) text.document().setDefaultFont(fixedFont) text.setReadOnly(True) text.setPlainText(info) layout.addWidget(QLabel(f"Version: {cv2.__version__}")) layout.addWidget(QLabel(f"Library: {cv2.__file__}")) layout.addWidget(text) layout.addStretch() return layout
class Example(QMainWindow): def __init__(self): super().__init__() self.text_editor = QPlainTextEdit() self.syntax = PythonHighlighter(self.text_editor.document()) self.init_ui()
def start(): app = QApplication(sys.argv) qanda = QandA() window = QWidget() window.resize(1000, 1000) next_button = QPushButton() answer_button = QPushButton() finish_button = QPushButton() answer_button.setText('ans') next_button.setText('next') finish_button.setText('Finish') #Create text entry box text_edit_widget = QPlainTextEdit() answer_edit_widget = QPlainTextEdit() #Change font, color of text entry box text_edit_widget.setStyleSheet("""QPlainTextEdit {background-color:#333; color: #00FF00; text-decoration: underline; font-family: Courier;}""") answer_edit_widget.setStyleSheet("""QPlainTextEdit {background-color:#333; color: #00FF00; text-decoration: underline; font-family: Courier;}""") layout = QVBoxLayout() layout.addWidget(text_edit_widget) layout.addWidget(answer_edit_widget) layout.addWidget(answer_button) layout.addWidget(next_button) layout.addWidget(finish_button) #"Central Widget" expands to fill all available space window.setLayout(layout) # Set initial value of text text_edit_widget.document().setPlainText("nextを押してください") # next押されたら、問題の変更と回答を消す必要ありつまりpass?? next_button.clicked.connect(lambda: output_question( qanda, text_edit_widget, answer_edit_widget, answer_button)) next_button.clicked.connect( lambda: answer_edit_widget.document().setPlainText('ansで答えが表示されます')) window.show() finish_button.clicked.connect(lambda: qanda.finish()) finish_button.clicked.connect(lambda: QCoreApplication.instance().quit()) sys.exit(app.exec_())
def editBookmarkDialog(cls, parent, item): ''' @param: parent QWidget @param: item BookmarkItem ''' dialog = QDialog(parent) layout = QFormLayout(dialog) title = QLineEdit() address = QLineEdit() keyword = QLineEdit() description = QPlainTextEdit() box = QDialogButtonBox(dialog) box.addButton(QDialogButtonBox.Ok) box.addButton(QDialogButtonBox.Cancel) box.rejected.connect(dialog.reject) box.accepted.connect(dialog.accept) layout.addRow(_('Title:'), title) title.setText(item.title()) if not item.isFolder(): layout.addRow(_('Address:'), address) address.setText(item.urlString()) layout.addRow(_('Keyword:'), keyword) keyword.setText(item.keyword()) layout.addRow(_('Description:'), description) description.document().setPlainText(item.description()) layout.addWidget(box) dialog.setWindowIcon(item.icon()) dialog.setWindowTitle(_('Edit Bookmark')) dialog.exec_() if dialog.result() == QDialog.Rejected: del dialog return False item.setTitle(title.text()) if not item.isFolder(): item.setUrl(QUrl.fromEncoded(address.text().encode())) item.setKeyword(keyword.text()) item.setDescription(description.toPlainText()) del dialog return True
class ChartDialog(QDialog): def ok_success(self, *args): sourcecode = '\n'.join(list(map(lambda x: f' {x}', self.code.toPlainText().replace('\t', '').replace(' ', '').splitlines()))) self.code = f''' def drawChart(qp:QtGui.QPainter, p1:QtCore.QPoint): {sourcecode} canvas = FigureCanvas(fig) canvas.draw() canvas.setStyleSheet("background-color:transparent;") renderer = canvas.get_renderer() fwidth, fheight = fig.get_size_inches() fig_bbox = fig.get_window_extent(renderer) self.drawMatplotlib(qp, canvas, p1) setattr(self, 'drawChart', drawChart) ''' exec(self.code, {'self': self.parent, **globals()}) self.accept() def __init__(self, parent): super().__init__(parent=parent) self.parent = parent self.setWindowTitle("Chart") QBtn = QDialogButtonBox.Ok | QDialogButtonBox.Cancel self.buttonBox = QDialogButtonBox(QBtn) self.buttonBox.accepted.connect(self.ok_success) self.buttonBox.rejected.connect(self.reject) self.resize(800, 600) self.code = QPlainTextEdit() highlight = syntax.PythonHighlighter(self.code.document()) self.code.zoomIn(4) self.code.setPlainText('') l = QListWidget() for c in self.parent._codes: ech = QListWidgetItem(c.label) ech.code = c.code ech.name = c.name l.addItem(ech) def code_clicked(c): self.code.setPlainText(c.code) l.itemClicked.connect(code_clicked) self.layout = QVBoxLayout() buttons = QHBoxLayout() buttons.addWidget(self.buttonBox, 1) codelay = QHBoxLayout() codelay.addWidget(l) codelay.addWidget(self.code, 1) self.layout.addLayout(codelay) self.layout.addLayout(buttons) self.setLayout(self.layout)
def edit(): con = sqlite3.connect('QandA.db') c = con.cursor() for row in c.execute("select * from qanda"): print(row) number = input('編集したい番号を入力してください>>>') if (number.isdigit()): app = QApplication(sys.argv) qanda = QandA(number) window = QWidget() window.resize(1000, 1000) save_button = QPushButton() edit_button = QPushButton() finish_button = QPushButton() save_button.setText('save') #Create text entry box text_edit_widget = QPlainTextEdit() answer_edit_widget = QPlainTextEdit() #Change font, color of text entry box text_edit_widget.setStyleSheet( """QPlainTextEdit {background-color:#333; color: #00FF00; text-decoration: underline; font-family: Courier;}""") answer_edit_widget.setStyleSheet( """QPlainTextEdit {background-color:#333; color: #00FF00; text-decoration: underline; font-family: Courier;}""") layout = QVBoxLayout() layout.addWidget(text_edit_widget) layout.addWidget(answer_edit_widget) layout.addWidget(save_button) #"Central Widget" expands to fill all available space window.setLayout(layout) #Print text to concole whenever it changes text_edit_widget.textChanged.connect( lambda: print(text_edit_widget.document().toPlainText())) # Set initial value of text text_edit_widget.document().setPlainText(qanda.question) answer_edit_widget.document().setPlainText(qanda.answer) # Write text to File whenever it changes save_button.clicked.connect( lambda: qanda.save(text_edit_widget.document().toPlainText(), answer_edit_widget.document().toPlainText())) save_button.clicked.connect(lambda: QCoreApplication.instance().quit()) window.show() sys.exit(app.exec_()) else: print('数値を入力してください') sys.exit()
def window(): textbomb = TextBomb() app = QApplication([]) w = QWidget() w.resize(386, 292) # title label = QLabel("Text Bomber", w) font = label.font() font.setPointSize(18) label.setFont(font) label.move(150, 20) label.show() # repeat label = QLabel("Repeat", w) label.show() label.move(20, 250) repeatNumber = QSpinBox(w) repeatNumber.setValue(1) repeatNumber.show() repeatNumber.move(70, 250) repeatNumber.valueChanged.connect(textbomb.setRepeat) label = QLabel("time(s)", w) label.show() label.move(120, 250) # phone number input label = QLabel("Recipient #", w) label.show() label.move(20, 50) numberBox = QLineEdit(w) numberBox.setFixedWidth(261) numberBox.move(100, 50) numberBox.textChanged.connect(textbomb.setNumber) # raw text input label = QLabel("Content", w) label.show() label.move(40, 80) textBox = QPlainTextEdit(w) textBox.setFixedSize(261, 151) textBox.move(100, 80) textBox.textChanged.connect( lambda: textbomb.setText(textBox.document().toPlainText())) # button to send text bomb button = QPushButton("Send", w) button.setFixedWidth(113) button.move(250, 250) button.clicked.connect(lambda: textbomb.send()) w.show() sys.exit(app.exec_())
class MainWindow(QMainWindow): def __init__(self, parent = None): super(MainWindow, self).__init__(parent) self.editor = QPlainTextEdit() font = QFont() font.setFamily('Courier') font.setFixedPitch(True) font.setPointSize(12) self.editor.setFont(font) self.highlighter = PythonSyntaxHighlighter(self.editor.document()) self.setCentralWidget(self.editor) self.setWindowTitle("Python Syntax Highlighter")
class TabHash(QWidget): def __init__(self, parent): super(QWidget, self).__init__(parent) self.layout = QVBoxLayout(self) self.textEditInput = QPlainTextEdit(self) self.textEditInput.setPlaceholderText('Input') self.textEditOutput = QPlainTextEdit(self) self.textEditOutput.setPlaceholderText('Output') self.pushButtonHash = QPushButton("Hash") self.pushButtonHash.clicked.connect(self.on_clickHash) self.layout.addWidget(self.textEditInput) self.layout.addWidget(self.pushButtonHash) self.layout.addWidget(self.textEditOutput) self.setLayout(self.layout) @pyqtSlot() def on_clickHash(self): textEditValue = self.textEditInput.document().toPlainText() m = hashlib.sha256() m.update(textEditValue.encode('utf-8')) self.textEditOutput.document().setPlainText(str(m.hexdigest()))
class TabDecode(QWidget): def setKey(self): key = getKey() self.textEditPrivateKey.document().setPlainText( key.exportKey('PEM').decode("utf-8")) def __init__(self, parent): super(QWidget, self).__init__(parent) self.layout = QVBoxLayout(self) self.labelPrivateKey = QLabel("Private key") self.textEditPrivateKey = QPlainTextEdit(self) self.setKey() self.labelInput = QLabel("Input") self.textEditInput = QPlainTextEdit(self) self.buttonDecode = QPushButton("Decode") self.buttonDecode.clicked.connect(self.on_clickDecode) self.labelOutput = QLabel("Output") self.textEditOutput = QPlainTextEdit(self) self.layout.addWidget(self.labelPrivateKey) self.layout.addWidget(self.textEditPrivateKey) self.layout.addWidget(self.labelInput) self.layout.addWidget(self.textEditInput) self.layout.addWidget(self.buttonDecode) self.layout.addWidget(self.labelOutput) self.layout.addWidget(self.textEditOutput) self.setLayout(self.layout) @pyqtSlot() def on_clickDecode(self): textEditValue = self.textEditInput.document().toPlainText() key = getKey() textEditValue = base64.b64decode(textEditValue.encode('utf-8')) cipher = PKCS1_OAEP.new(key) ciphertext = cipher.decrypt(textEditValue) print(ciphertext) ciphertext = ciphertext.decode('utf-8') self.textEditOutput.document().setPlainText(str(ciphertext))
class ExampleWindow(QMainWindow): def __init__(self, m): QMainWindow.__init__(self) self.setMinimumSize(QSize(440, 240)) self.setWindowTitle("Work Area") # Add text field self.text = m self.b = QPlainTextEdit(self) self.b.insertPlainText(m) self.b.move(10, 10) self.b.resize(400, 200) pybutton = QPushButton('Copy to clipboard', self) pybutton.clicked.connect(self.clickMethod) pybutton.resize(150, 50) pybutton.move(290, 190) def clickMethod(self): pyperclip.copy(self.b.document().toPlainText())
def initUI(self): editor = QPlainTextEdit() editor.setStyleSheet(""" QPlainTextEdit{ font-family:'Consolas'; color: #ccc; background-color: #2b2b2b; font-size: 10pt; } """) highlight = syntax.PythonHighlighter(editor.document()) editor.setPlainText(session.contents) main_vbox = QVBoxLayout() main_vbox.setContentsMargins(0, 0, 0, 0) main_vbox.addWidget(editor) self.setLayout(main_vbox) self.setWindowTitle("File") self.setGeometry(400, 100, 1000, 700) self.show()
def __init__(self, mainwin): te = QPlainTextEdit() hilighter = hilite.Highlighter(te.document()) qd = QDockWidget("Dae:Xgm") qd.setWidget(te) qd.setMinimumSize(480, 240) qd.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetVerticalTitleBar | QDockWidget.DockWidgetFloatable) qd.setAllowedAreas(Qt.LeftDockWidgetArea) qdss = "QWidget{background-color: rgb(64,64,128); color: rgb(160,160,192);}" qdss += "QDockWidget::title {background-color: rgb(32,32,48); color: rgb(255,0,0);}" qd.setStyleSheet(qdss) mainwin.addDockWidget(Qt.LeftDockWidgetArea, qd) if mainwin.prevDockWidget != None: mainwin.tabifyDockWidget(mainwin.prevDockWidget, qd) mainwin.prevDockWidget = qd self.stdout = "" self.stderr = "" def onSubProcStdout(): bytes = self.process.readAllStandardOutput() self.stdout += str(bytes, encoding='ascii') te.setPlainText(self.stdout + self.stderr) def onSubProcStderr(): bytes = self.process.readAllStandardError() self.stderr += str(bytes, encoding='ascii') te.setPlainText(self.stdout + self.stderr) def finished(text): print("process done...\n") self.process = QProcess() self.process.readyReadStandardError.connect(onSubProcStderr) self.process.readyReadStandardOutput.connect(onSubProcStdout) self.process.finished.connect(finished) self.process.start(cmd)
class ScriptWindow(QDialog): def __init__(self, parent=None): super(ScriptWindow, self).__init__(parent) self.setGeometry(100, 100, 800, 600) self.parent = parent font = QFontDatabase.systemFont(QFontDatabase.FixedFont) font.setFixedPitch(True) font.setPointSize(10) self.editor = QPlainTextEdit() self.editor.setFont(font) self.editor.setTabStopWidth(self.editor.fontMetrics().width(" ") * 4) self.highlight = PythonHighlighter(self.editor.document()) self.editor.setPlainText("# self.parent is the main GUI handle") self.runScriptButton = QPushButton("Run script") self.layout = QVBoxLayout() self.layout.addWidget(self.editor) self.layout.addWidget(self.runScriptButton) self.setLayout(self.layout) self.setWindowTitle("Script editor") self.setup_button_behavior() self.show() def setup_button_behavior(self): self.runScriptButton.clicked.connect(self.runscript) def runscript(self): print("Script is executed.") print("Testing parent data accessibility") text2execute = self.editor.toPlainText() exec(text2execute)
class MyMainWindow(QMainWindow): def __init__(self): super(MyMainWindow, self).__init__() layout = QHBoxLayout() self.centralWidget = QWidget() self.centralWidget.setLayout(layout) self.setCentralWidget(self.centralWidget) self.textedit = QPlainTextEdit() self.highlight = syntax.PythonHighlighter(self.textedit.document()) self.text = self.textedit.toPlainText() self.textedit.setFont(QFont("Microsoft YaHei", 17)) self.textedit.textChanged.connect(self.save_text) layout.addWidget(self.textedit) def save_text(self): list = ["baidu", "test", "screenshotaaa", "search"] lines_last_words = self.text.split("\n")[-1].split(" ")[-1] self.picwindow = ImgListView(lines_last_words) self.picwindow.resize(130, 130) self.picwindow.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool) if lines_last_words in list: self.picwindow.show() # popup_pos = self.textedit.cursorRect() # x = popup_pos.x() # y = popup_pos.height() # pos2 = self.mapToGlobal(QPoint(4*x,2*y)) # #pos2 = self.mapToGlobal(QPoint(1.2*x,2*y)) # self.picwindow.move(pos2) # self.picwindow.setStyleSheet("border :1px solid black;") # self.picwindow.raise_() else: self.picwindow.hide() with open('mytextfile.txt', 'w') as f: f.write(self.text)
def __init__(self,mainwin): te = QPlainTextEdit() hilighter = hilite.Highlighter(te.document()) qd = QDockWidget("Dae:Xgm") qd.setWidget(te) qd.setMinimumSize(480,240) qd.setFeatures(QDockWidget.DockWidgetMovable|QDockWidget.DockWidgetVerticalTitleBar|QDockWidget.DockWidgetFloatable) qd.setAllowedAreas(Qt.LeftDockWidgetArea) qdss = "QWidget{background-color: rgb(64,64,128); color: rgb(160,160,192);}" qdss += "QDockWidget::title {background-color: rgb(32,32,48); color: rgb(255,0,0);}" qd.setStyleSheet(qdss) mainwin.addDockWidget(Qt.LeftDockWidgetArea,qd) if mainwin.prevDockWidget!=None: mainwin.tabifyDockWidget(mainwin.prevDockWidget,qd) mainwin.prevDockWidget = qd self.stdout = "" self.stderr = "" def onSubProcStdout(): bytes = self.process.readAllStandardOutput() self.stdout += str(bytes, encoding='ascii') te.setPlainText(self.stdout+self.stderr) def onSubProcStderr(): bytes = self.process.readAllStandardError() self.stderr += str(bytes, encoding='ascii') te.setPlainText(self.stdout+self.stderr) def finished(text): print( "process done...\n") self.process = QProcess() self.process.readyReadStandardError.connect(onSubProcStderr) self.process.readyReadStandardOutput.connect(onSubProcStdout); self.process.finished.connect(finished); self.process.start(cmd)
class AppDemo(QWidget): def __init__(self): super().__init__() self.resize(300, 100) mainLayout = QVBoxLayout() validator = QRegExpValidator(QRegExp(r'[0-9 ]+')) self.lineEdit = QLineEdit() self.lineEdit.setStyleSheet('font-size: 30px; height: 50px') self.lineEdit.setValidator(validator) self.lineEdit.textChanged.connect(self.onTextChanged) mainLayout.addWidget(self.lineEdit) self.textEditor = QPlainTextEdit() self.textEditor.setStyleSheet('font-size: 30px; color:green') mainLayout.addWidget(self.textEditor) for i in range(1, 21): self.textEditor.appendPlainText('line {0}'.format(i)) self.highlighter = SyntaxHighlighter(self.textEditor.document()) self.setLayout(mainLayout) def onTextChanged(self, text): fnt = QTextCharFormat() fnt.setBackground(QColor('yellow')) self.highlighter.clear_highlight() try: lineNumber = int(text) - 1 self.highlighter.highlight_line(lineNumber, fnt) except ValueError: pass
def _define_dl_info_view(self, text=None): border = self.DEFAULT_BORDER text_width = self.parent.DEFAULT_WIDTH * self.DEFAULT_PANE_WIDTH_RATIO text_height = self.parent.DEFAULT_HEIGHT * self.DEFAULT_PANE_HEIGHT_RATIO if self.parent.cfg is not None: border = self.parent.cfg.get_element( path=[CfgConsts.UI, CfgConsts.BORDER, CfgConsts.BORDER], default=border) total_width, total_height = UiUtils.get_dimensions( cfg=self.parent.cfg, path=[CfgConsts.UI, CfgConsts.GENERAL]) text_width_ratio, text_height_ratio = UiUtils.get_dimensions( cfg=self.parent.cfg, path=[ CfgConsts.UI, CfgConsts.DOWNLOAD, CfgConsts.TEXT, CfgConsts.RATIO ]) text_width = (total_width * text_width_ratio) - border text_height = (total_height * text_height_ratio) - border dl_info = QPlainTextEdit() dl_info.setFixedSize(text_width, text_height) dl_info.setReadOnly(True) if text is not None: dl_info.insertPlainText(text) font = QFont() font.setFamily("Courier New") doc = dl_info.document() doc.setDefaultFont(font) return dl_info
class Assembler(QMainWindow): def __init__(self, parent=None): super(Assembler, self).__init__(parent) self.resize(800, 600) self.filename = None self.filetuple = None self.dirty = False # Refers to Data Page only. self.nb = None centralwidget = QWidget(self) gridLayout = QGridLayout(centralwidget) self.tabWidget = QTabWidget(centralwidget) # textbox self.tab = QWidget() font = QFont() font.setFamily("Inconsolata") font.setPointSize(14) self.tab.setFont(font) gridLayout_3 = QGridLayout(self.tab) self.plainTextEdit = QPlainTextEdit(self.tab) self.plainTextEdit.installEventFilter(self) self.plainTextEdit.setAcceptDrops(True) gridLayout_3.addWidget(self.plainTextEdit, 0, 0, 1, 1) self.tabWidget.addTab(self.tab, "") self.tab_2 = QWidget() self.tab_2.setFont(font) gridLayout_2 = QGridLayout(self.tab_2) self.plainTextEdit_2 = QPlainTextEdit(self.tab_2) gridLayout_2.addWidget(self.plainTextEdit_2, 0, 0, 1, 1) self.tabWidget.addTab(self.tab_2, "") self.tab_3 = QWidget() self.tab_3.setFont(font) gridLayout_3 = QGridLayout(self.tab_3) self.checkbox = QCheckBox("Cloning genes by tailed primers (no pYPKa_A vectors constructed)") self.checkbox.setChecked(True) gridLayout_3.addWidget(self.checkbox, 0, 0, 0, 0) self.tabWidget.addTab(self.tab_3, "") gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1) self.setCentralWidget(centralwidget) menubar = QMenuBar(self) menubar.setGeometry(QRect(0, 0, 800, 29)) menu_File = QMenu(menubar) self.menu_Solve = QMenu(menubar) self.menu_Help = QMenu(menubar) self.setMenuBar(menubar) self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.action_New = QAction(self) self.actionSave_As = QAction(self) self.action_Save = QAction(self) self.action_Open = QAction(self) self.action_Quit = QAction(self) self.action_About = QAction(self) self.actionShow_CCPL = QAction(self) self.action_Solve = QAction(self) self.action_OpenNB = QAction(self) self.action_CCPL = QAction(self) self.action_Help = QAction(self) menu_File.addAction(self.action_New) menu_File.addAction(self.action_Open) menu_File.addAction(self.actionSave_As) menu_File.addAction(self.action_Save) menu_File.addSeparator() menu_File.addAction(self.action_Quit) self.menu_Solve.addAction(self.action_Solve) self.menu_Solve.addAction(self.action_OpenNB) self.menu_Help.addAction(self.action_About) #self.menu_Help.addAction(self.action_CCPL) #self.menu_Help.addAction(self.action_Help) menubar.addAction(menu_File.menuAction()) menubar.addAction(self.menu_Solve.menuAction()) menubar.addAction(self.menu_Help.menuAction()) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),\ "Data Page") self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2),\ "Assembly log") self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3),\ "Settings") menu_File.setTitle("&File") self.menu_Solve.setTitle("&Assemble") self.menu_Help.setTitle("&About") self.tabWidget.setCurrentIndex(0) self.action_New.setText("&New") self.action_Open.setText("&Open") self.actionSave_As.setText("Save &As") self.action_Save.setText("&Save") self.action_Quit.setText("&Quit") self.action_Solve.setText("&Assemble") self.action_OpenNB.setText("&Open &pathway") self.action_About.setText("&About") #self.action_CCPL.setText("&CCPL") #self.action_Help.setText("&Help") self.action_Quit.triggered.connect(self.close) allToolBar = self.addToolBar("AllToolBar") allToolBar.setObjectName("AllToolBar") self.addActions(allToolBar, (self.action_Open, self.actionSave_As, self.action_Save, self.action_Solve, self.action_OpenNB, self.action_Quit )) self.action_New.triggered.connect(self.fileNew) self.action_Open.triggered.connect(self.fileOpen) self.actionSave_As.triggered.connect(self.fileSaveAs) self.action_Save.triggered.connect(self.fileSave) self.action_Solve.triggered.connect(self.solveAssembly) self.action_OpenNB.triggered.connect(self.openNB) self.action_About.triggered.connect(self.aboutBox) #self.action_CCPL.triggered.connect(self.displayCCPL) #self.action_Help.triggered.connect(self.help) self.plainTextEdit.textChanged.connect(self.setDirty) self.action_New = self.editAction(self.action_New, None,\ 'ctrl+N', 'filenew', 'New File.') self.action_Open = self.editAction(self.action_Open, None, 'ctrl+O', 'fileopen', 'Open File.') self.actionSave_As = self.editAction(self.actionSave_As,\ None, 'ctrl+A', 'filesaveas',\ 'Save and Name File.') self.action_Save = self.editAction(self.action_Save, None, 'ctrl+S', 'filesave', 'Save File.') self.action_Solve = self.editAction(self.action_Solve, None, '', 'solve', 'Assemble.') self.action_OpenNB = self.editAction(self.action_OpenNB, None, '', 'ipynb', 'Open pathway.') self.action_About = self.editAction(self.action_About, None, 'ctrl+B', 'about','Pop About Box.') self.action_CCPL = self.editAction(self.action_CCPL, None, 'ctrl+G', 'licence', 'Show Licence') self.action_Help = self.editAction(self.action_Help, None, 'ctrl+H', 'help', 'Show Help Page.') self.action_Quit = self.editAction(self.action_Quit, None, 'ctrl+Q', 'quit', 'Quit the program.') self.plainTextEdit_2.setReadOnly(True) self.setWindowTitle("ypkpathway") self.setWindowIcon(QIcon( resource_filename("ypkpathway","icons/ypkpathway.png"))) self.plainTextEdit.setFocus() def eventFilter(self, object, event): #print(event.type(), QEvent.DragEnter, object, self.plainTextEdit) if (object is self.plainTextEdit): if (event.type() == QEvent.DragEnter): if event.mimeData().hasUrls(): event.accept() # must accept the dragEnterEvent or else the dropEvent can't occur !!! print("accept") else: event.ignore() print("ignore") if (event.type() == QEvent.Drop): if event.mimeData().hasUrls(): # if file or link is dropped urlcount = len(event.mimeData().urls()) # count number of drops url = event.mimeData().urls()[0] # get first url object.setPlainText('abc') # assign first url to editline event.accept() # doesnt appear to be needed print(456) return True return False # lets the event continue to the edit return False def setDirty(self): '''On change of text in textEdit window, set the flag "dirty" to True''' index = self.tabWidget.currentIndex() if index is not 0: return if self.dirty: return True self.dirty = True self.updateStatus('self.dirty set to True') def clearDirty(self): 'Clear dirty flag' self.dirty = False def fileNew(self): '''Clear both Data Page and Solution Page.''' self.plainTextEdit.setPlainText(' ') self.plainTextEdit_2.setPlainText(' ') self.clearDirty() self.filename = None def okToContinue(self): if self.dirty: reply = QMessageBox.question(self, "Data Loader - Unsaved Changes", "Save unsaved changes?", QMessageBox.Yes|QMessageBox.No|QMessageBox.Cancel) if reply == QMessageBox.Cancel: return False elif reply == QMessageBox.Yes: self.clearDirty() return self.fileSave() return True def okRead(self): 'Pop-up a warning message.' reply = QMessageBox.warning(self, "Warning", '''\nFile Open and Save only in Data Page \n\(Use SaveAs for the Assembly log)''', QMessageBox.Ok) return True def fileOpen(self): '''Open a file in Data Page (with index == 0)''' if self.tabWidget.currentIndex(): self.okRead() return if not self.okToContinue(): return dir_ = (os.path.dirname(str(self.filename)) if self.filename is not None else ".") filetuple = QFileDialog.getOpenFileName(self,"Open File", dir_,) self.filename = filetuple[0] # QFileDialog returns a tuple x with x[0] = file name and # x[1] = type of filter. if self.filename: self.loadFile(self.filename) self.updateStatus('New file opened.') def loadFile(self, fname=None): fl = open(fname, "r") text = fl.read() self.plainTextEdit.setPlainText(text) self.dirty = False def fileSave(self): '''Save file with current file name.''' if self.tabWidget.currentIndex(): self.okRead() return if self.filename is None: return self.fileSaveAs() else: flname = self.filename if flname: tempText = self.plainTextEdit.toPlainText() with open(flname, 'w') as fl: fl.write(tempText) self.dirty = False self.updateStatus('File saved.') return True else: self.updateStatus('Failed to save... ') return False self.filename = None self.dirty = False def fileSaveAs(self): '''Save file with a new name.''' qpr = self.qprintline fname = self.filename or "NoName.txt" self.filename = str(QFileDialog.getSaveFileName(self,"ypkpathway - Save File", fname)) flname = self.filename or "NoName.txt" self.filename = flname fl = open(flname, 'w') tempText = str(self.plainTextEdit.toPlainText()) fl.write(tempText) fl.close() self.dirty = False self.updateStatus('File saved.') def solveAssembly(self): printline = self.qprintline self.plainTextEdit_2.clear() self.tabWidget.setCurrentIndex(1) flbase = os.path.basename(str(self.filename)) title = 'Assembly log for ' + flbase printline('='*len(title)) printline(title) printline('='*len(title)) #print(type(self.plainTextEdit.toPlainText())) #qstringobj = self.plainTextEdit.toPlainText().encode('utf-8') #print(type(qstringobj)) #<class 'PyQt4.QtCore.QString'> #print(qstringobj.toUtf8()[3268:3279]) #print(str(qstringobj.toUtf8()[3268:3279])) #print(type(rawtext), "rawtext") #codec0 = .QTextCodec.codecForName("UTF-16"); #rawtext = unicode(codec0.fromUnicode(tmp), 'UTF-16') #unicode(qstringobj.toUtf8(), encoding="UTF-8").decode() qstringobj = self.plainTextEdit.toPlainText() #import sys;sys.exit(42) pth = parse( qstringobj ) #import sys;sys.exit(42) if len(pth)==0: printline("No of sequences found in Data window") return if self.filename is None: self.fileSaveAs() dir_, ext = os.path.splitext( str(self.filename)) fl, log = ypkpathway.pathway( pth, dir_, pYPKa_A = not self.checkbox.isChecked(), print = printline) if not fl: return with open(os.path.join(dir_, "log.txt"),"w") as f: f.write(log) shutil.copy2( str(self.filename), os.path.join(dir_, "INDATA_"+os.path.basename(str(self.filename)))) printline('') printline('\n\nAssembly finished.') printline('click on the Open pathway button above to open the pathway in the default web browser') self.nb = fl.path def qprintline(self, line): '''Append one line to Solution Page.''' self.plainTextEdit_2.appendPlainText(line.rstrip()) #.decode("utf8")) QApplication.processEvents() def openNB(self): if self.nb: subprocess.Popen(["ipython", "notebook", self.nb]) def aboutBox(self): from PyQt5.QtCore import QT_VERSION_STR from PyQt5.Qt import PYQT_VERSION_STR from sip import SIP_VERSION_STR from ._version import get_versions __version__ = get_versions()["version"][:5] del get_versions from IPython import __version__ as IPython_version QMessageBox.about(self, "About ypkpathway", """<b>Planning of yeast pathway kit constructions.</b> <p>version: {}<br> Copyright 2015-2017 Björn Johansson. This software is released under a BSD style license. This software comes with no warranties expressed or implied.<br><br> Python version: {}<br><br> IPython version: {}<br> Qt version: {}<br> SIP version: {}<br> PyQt version: {}<br> pydna version: {}<br></p> """.format(__version__, sys.version, IPython_version, QT_VERSION_STR, SIP_VERSION_STR, PYQT_VERSION_STR, pydna.__version__[:5])) def displayCCPL(self): '''Read and display CCPL licence.''' self.plainTextEdit.setPlainText(open('CCPL.txt').read()) self.dirty = False self.filename = 'COPYING.txt' self.updateStatus('CCPL displayed.') def help(self): '''Read and display a help file- currently the README.txt.''' self.plainTextEdit.setPlainText(open('README.md').read()) self.dirty = False self.filename = 'README.txt' self.updateStatus('README displayed.') def addActions(self, target, actions): '''Actions are added to Tool Bar.''' for action in actions: if action is None: target.addSeparator() else: target.addAction(action) def editAction(self, action, slot=None, shortcut=None, icon=None, tip=None): '''This method adds to action: icon, shortcut, ToolTip,\ StatusTip and can connect triggered action to slot ''' if icon is not None: action.setIcon(QIcon(":/%s.png" % (icon))) if shortcut is not None: action.setShortcut(shortcut) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if slot is not None: action.triggered.connect(slot) return action def qreadline(self, lineNo): '''Read one line from Data Page (lineNo starts with 0)''' return str(self.plainTextEdit.document().\ findBlockByLineNumber(lineNo).text()).rstrip() def updateStatus(self, message): '''Keep status current.''' if self.filename is not None: flbase = os.path.basename(str(self.filename)) self.setWindowTitle(str("ypkpathway - " +\ flbase + "[*]") ) self.statusBar().showMessage(message, 5000) self.setWindowModified(self.dirty)