def __init__(self, *args, **kwargs): super(EditorBase, self).__init__(*args, **kwargs) # Make sure editor always has a monospace font. self.__zoom = 0 self.setFont() self.__highlighter = Highlighter(self.document()) self.__highlighter.setRules(PythonHighlighter) # Set general document option option = self.document().defaultTextOption() option.setFlags(option.flags() | option.IncludeTrailingSpaces | option.AddSpaceForLineAndParagraphSeparators) if self.indentUsingSpaces(): option.setFlags(option.flags() | option.ShowTabsAndSpaces) self.document().setDefaultTextOption(option) # View Settings # self.setShowWhitespace() # self.setShowLineEndings() # self.setWrap() # self.setHighlightCurrentLine() # self.setLongLineIndicatorPosition() # So that graphical elements wont break. self.cursorPositionChanged.connect(self.viewport().update)
def __init__(self, player_key): self.level = None self.player = None self.player_key = player_key self.objects = [] self.ui = UI(self) self.turn_tracker = TurnTracker(self) self.turn = 'player' self.active_ability = None self.effect_tracker = EffectTracker(self) self.clock = pygame.time.Clock() self.tick = 0 self.pointer = Pointer(self) self.highlighter = Highlighter(self) self.sub_screen = pygame.Surface((720, 720)).convert() self.game_display = GameDisplay(self) self.screen_mode = 'zoomed' self.zoomed_sub_screen = pygame.Surface((19 * 16, 15 * 24)).convert() self.zoomed_sub_screen_scale = pygame.Surface( (19 * 16 * 2, 15 * 24 * 2)).convert() self.zoomed_sub_screen_scale_rect = self.zoomed_sub_screen_scale.get_rect( ) self.zoomed_sub_screen_scale_rect.topleft = (56, 0)
def __init__(self, parent=None): super(Editor, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.file_path = None self.proc = QProcess() Highlighter(self.ui.text_editor) self.ui.actionRun.triggered.connect(self.run_triggered) self.ui.actionOpen.triggered.connect(self.open_triggered) self.ui.actionSave.triggered.connect(self.save_triggered) self.ui.actionClose.triggered.connect(self.close_triggered) self.proc.started.connect(self.process_started) self.proc.errorOccurred.connect(self.process_error_occurred) self.proc.readyReadStandardOutput.connect( self.process_ready_read_standard_output) self.proc.finished.connect(self.process_finished) self.proc.readyReadStandardError.connect( self.process_ready_read_standard_error)
def __init__(self): super().__init__() self.text_area = TextArea(self, bg="white", fg="black", undo=True) self.scrollbar = ttk.Scrollbar(orient="vertical", command=self.scroll_text) self.text_area.configure(yscrollcommand=self.scrollbar.set) self.scrollbar.pack(side=tk.LEFT, fill=tk.Y) self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) self.line_numbers = LineNumbers(self, self.text_area, bg="grey", fg="white", width=1) self.highlighter = Highlighter(self.text_area, 'languages/python.yaml') # first_100_numbers = [str(n+1) for n in range(100)] # self.line_numbers.insert(1.0, "\n".join(first_100_numbers)) # self.line_numbers.configure(state="disabled", width=3) self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.line_numbers.pack(side=tk.LEFT, fill=tk.Y) self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) self.bind_events()
def __init__(self, settings, parent_textEdit): sys.excepthook = exception_handler QtWidgets.QDialog.__init__(self) self.settings = settings self.parent_textEdit = parent_textEdit self.queryTime = "" self.queryFilters = "" textEditSql = "" # Set up the user interface from Designer. self.ui = Ui_Dialog_sql() self.ui.setupUi(self) #self.setWindowTitle("Query: " + self.queryname) self.ui.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu) highlighter = Highlighter(self.ui.textEdit_sql) self.ui.textEdit_sql.setContextMenuPolicy(Qt.CustomContextMenu) self.ui.textEdit_sql.customContextMenuRequested.connect(self.sql_menu) # fill textEdit_sql from queryname self.ui.textEdit_sql.setText(textEditSql) self.ui.tableWidget_results.setContextMenuPolicy(Qt.CustomContextMenu) self.ui.tableWidget_results.customContextMenuRequested.connect( self.table_menu) # Add tables and fields to treeWidget self.get_schema_update_treeWidget() self.ui.treeWidget.itemClicked.connect(self.get_item) self.ui.pushButton_runSQL.clicked.connect(self.run_SQL) self.ui.pushButton_export.clicked.connect(self.export_file) self.ui.splitter.setSizes([20, 180]) self.ui.splitter_2.setSizes([10, 290])
def __init__(self): super().__init__() self.title('Python Text Editor v3') self.geometry('800x600') self.foreground = 'black' self.background = 'lightgrey' self.text_foreground = 'black' self.text_background = 'white' self.load_scheme_file('schemes/default.yaml') self.configure_ttk_elements() self.font_size = 15 self.font_family = "Ubuntu Mono" self.load_font_file('schemes/font.yaml') self.text_area = TextArea(self, bg=self.text_background, fg=self.text_foreground, undo=True, font=(self.font_family, self.font_size)) self.scrollbar = ttk.Scrollbar(orient="vertical", command=self.scroll_text) self.text_area.configure(yscrollcommand=self.scrollbar.set) self.line_numbers = LineNumbers(self, self.text_area, bg="grey", fg="white", width=1) self.highlighter = Highlighter(self.text_area, 'languages/python.yaml') self.menu = tk.Menu(self, bg=self.background, fg=self.foreground) self.all_menus = [self.menu] sub_menu_items = ["file", "edit", "tools", "help"] self.generate_sub_menus(sub_menu_items) self.configure(menu=self.menu) self.right_click_menu = tk.Menu(self, bg=self.background, fg=self.foreground, tearoff=0) self.right_click_menu.add_command(label='Cut', command=self.edit_cut) self.right_click_menu.add_command(label='Copy', command=self.edit_copy) self.right_click_menu.add_command(label='Paste', command=self.edit_paste) self.all_menus.append(self.right_click_menu) self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.line_numbers.pack(side=tk.LEFT, fill=tk.Y) self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) self.bind_events() self.open_file = ''
def main(): highlighter = Highlighter() queries = make_queries_dict() if FLAGS.input_file is not None: scrape_document_file(FLAGS.input_file, queries, highlighter) else: scrape_query_file(queries[FLAGS.query], highlighter)
def load_syntax_highlighting_file(self): syntax_file = filedialog.askopenfilename(filetypes=[("YAML file", ("*.yaml", "*.yml"))]) if syntax_file: self.highlighter.clear_highlight() self.highlighter = Highlighter(self.text_area, syntax_file) self.highlighter.force_highlight()
def load_syntax_highlighting(self): syntax_file = filedialog.askopenfilename(filetypes=[('YAML file', ('*.yaml', '*.yml'))]) if syntax_file: self.highlighter.clear_highlight() self.highlighter = Highlighter(self.text_area, syntax_file) self.highlighter.force_highlight()
def __init__(self, left, top, width, height, parent=None): super().__init__(parent) self.left = left self.top = top self.width = width self.height = height self.setParent(parent) self.initWidget() self.highLighter = Highlighter(self.document())
def __init__(self, app, parent_textEdit): sys.excepthook = exception_handler QtWidgets.QDialog.__init__(self) self.app = app self.parent_textEdit = parent_textEdit self.queryTime = "" self.queryFilters = "" textEditSql = "" # Set up the user interface from Designer. self.ui = Ui_Dialog_sql() self.ui.setupUi(self) try: w = int(self.app.settings['dialogsql_w']) h = int(self.app.settings['dialogsql_h']) if h > 50 and w > 50: self.resize(w, h) except: pass self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint) font = 'font: ' + str(self.app.settings['fontsize']) + 'pt ' font += '"' + self.app.settings['font'] + '";' self.setStyleSheet(font) #self.setWindowTitle("Query: " + self.queryname) self.ui.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu) highlighter = Highlighter(self.ui.textEdit_sql) self.ui.textEdit_sql.setContextMenuPolicy(Qt.CustomContextMenu) self.ui.textEdit_sql.customContextMenuRequested.connect(self.sql_menu) # fill textEdit_sql from queryname self.ui.textEdit_sql.setText(textEditSql) self.ui.tableWidget_results.setContextMenuPolicy(Qt.CustomContextMenu) self.ui.tableWidget_results.customContextMenuRequested.connect( self.table_menu) # Add tables and fields to treeWidget self.get_schema_update_treeWidget() self.ui.treeWidget.itemClicked.connect(self.get_item) self.ui.pushButton_runSQL.clicked.connect(self.run_SQL) self.ui.pushButton_export.clicked.connect(self.export_file) self.ui.splitter.setSizes([20, 180]) try: s0 = int(self.app.settings['dialogsql_splitter_h0']) s1 = int(self.app.settings['dialogsql_splitter_h1']) if s0 > 10 and s1 > 10: self.ui.splitter.setSizes([s0, s1]) except: pass self.ui.splitter_2.setSizes([10, 290]) try: s0 = int(self.app.settings['dialogsql_splitter_v0']) s1 = int(self.app.settings['dialogsql_splitter_v1']) if s0 > 10 and s1 > 10: self.ui.splitter_2.setSizes([s0, s1]) except: pass
def terminal_mode(self, event=None): if self.thee_mode == 1: self.line_numbers.destroy() self.text_area.config(state=tk.NORMAL, tabs=4) self.text_area.delete('1.0', tk.END) self.text_area.insert(tk.END, self.terminal_mode_buffer) self.terminal.writeLoop() self.highlighter = Highlighter(self.text_area) self.thee_mode = 2
def editor_mode(self, event=None): self.text_area.config(state=tk.NORMAL, tabs=4) self.text_area.delete('1.0', tk.END) self.text_area.insert(tk.END, self.editor_mode_buffer) self.highlighter = Highlighter(self.text_area) self.thee_mode = 1 self.line_numbers = LineNumbers(self.frame1, self.text_area) self.line_numbers.config(bg=self.text_background, width=len(self.line_numbers.line_number) * 10, highlightthickness=0) self.line_numbers.grid(row=0, column=0, sticky='ns') self.status_bar1.set("Line %d, Column %d" % (self.line, self.column)) self.status_bar3.set("%s" % self.file_name) self.status_bar4.set("Spaces: %d" % self.spaces) self.status_bar5.set("%s" % self.status)
def register_syntax(self, fileName): ext = manage_files.get_file_extension(fileName)[1:] if self.highlighter is not None and \ not self.path.endswith(ext): self.highlighter.deleteLater() if not self.path.endswith(ext): if ext in loader.extensions: self.highlighter = Highlighter( self.document(), loader.extensions.get(ext, 'py')) else: try: self.highlighter = HighlighterPygments( self.document(), fileName) except: print 'There is no lexer for this file' #for apply rehighlighting (rehighlighting form highlighter not responding) self.firstVisibleBlock().document().find('\n').insertText('')
def __init__(self): super().__init__() self.text_area = TextArea(self, bg="white", fg="black", undo=True) self.scrollbar = ttk.Scrollbar(orient="vertical", command=self.scroll_text) self.text_area.configure(yscrollcommand=self.scrollbar.set) self.line_numbers = LineNumbers(self, self.text_area, bg="grey", fg="white", width=1) self.highlighter = Highlighter(self.text_area, 'languages/python.yaml') self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.line_numbers.pack(side=tk.LEFT, fill=tk.Y) self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) self.bind_events()
def __init__(self, parent, type): super().__init__() self._parent = parent self._type = type fileLabel = QtWidgets.QLabel() fileLabel.setText("File:") self._fileComboBox = QtWidgets.QComboBox() self._fileComboBox.currentIndexChanged.connect(self.currentChanged) fileLayout = QtWidgets.QHBoxLayout() fileLayout.addWidget(fileLabel) fileLayout.addWidget(self._fileComboBox) self._editor = ShaderSource() self._highlighter = Highlighter(self._editor.document()) layout = QtWidgets.QVBoxLayout(self) layout.addLayout(fileLayout) layout.addWidget(self._editor)
def init_ui(self): self.text_edit = QTextEdit(self) self.setCentralWidget(self.text_edit) font = QFont("Menlo", 12) # TODO: Create a layout and change the line spacing #spacing = QFontMetrics(font).lineSpacing() self.text_edit.setFont(font) self.highlighter = Highlighter(self.text_edit.document(), DEFAULT_RULES, DEFAULT_STYLE) #print("Highlighter doc: {}".format(self.text_edit.document())) menu_bar = self.menuBar() m_file = menu_bar.addMenu("File") i_open = QAction("Open", self) i_open.setShortcut('Ctrl+O') i_open.triggered.connect(self.on_open) m_file.addAction(i_open) self.setGeometry(300, 300, 350, 300) self.setWindowTitle("tea")
def __init__(self, manager, white_player='human', black_player='human'): # game state members self.game_manager = manager self.game_running = False self.needs_redraw = True self.screen = None self.clock = pygame.time.Clock() # game components self.game_logic = GameLogic(self) self.game_grid = GameGrid(self) self.game_board = None self.white_player = None self.black_player = None self.initialize_players(white_player, black_player) self.turn_manager = TurnManager(self) self.highlighter = Highlighter(self) self.logger = Logger(self) self.buttons = {}
def setupEditor(self): self.highlighter = Highlighter(self.ui.mainTextEdit.document())
def __init__(self): """Initialize Tab with layout and behavior.""" super(Tab, self).__init__() # regex pattern for SQL query block comments self.block_comment_re = re.compile( r'(^)?[^\S\n]*/(?:\*(.*?)\*/[^\S\n]*|/[^\n]*)($)?', re.DOTALL | re.MULTILINE) main_layout = QVBoxLayout(self) # define gdb props self.gdb = None self.gdb_items = None self.gdb_columns_names = None self.gdb_schemas = None # connected geodatabase path toolbar self.connected_gdb_path_label = QLabel('') self.connected_gdb_path_label.setTextInteractionFlags( Qt.TextSelectableByMouse) self.connected_gdb_path_label.setToolTip( 'Connected geodatabase that queries will be run against') self.connected_gdb_path_label.setText(not_connected_to_gdb_message) self.browse_to_gdb = QPushButton('Browse') self.browse_to_gdb.setShortcut(QKeySequence('Ctrl+B')) self.browse_to_gdb.clicked.connect( lambda evt, arg=True: self.connect_to_geodatabase( evt, triggered_with_browse=True)) self.gdb_sql_dialect_combobox = QComboBox() for dialect in sql_dialects_names: self.gdb_sql_dialect_combobox.addItem(dialect) self.gdb_browse_toolbar = QToolBar() self.gdb_browse_toolbar.setMaximumHeight(50) self.gdb_browse_toolbar.addWidget(self.browse_to_gdb) self.gdb_browse_toolbar.addWidget(self.connected_gdb_path_label) self.gdb_browse_toolbar.addSeparator() self.gdb_browse_toolbar.addWidget(self.gdb_sql_dialect_combobox) # table with results self.table = ResultTable() # execute SQL query self.execute = QAction('Execute', self) self.execute.setShortcuts( [QKeySequence('F5'), QKeySequence('Ctrl+Return')]) self.execute.triggered.connect(self.run_query) self.addAction(self.execute) # enter a SQL query self.query = TextEditor() self.query.setPlainText('') font = self.query.font() font.setFamily('Consolas') font.setStyleHint(QFont.Monospace) # TODO: add line numbers to the text editor font.setPointSize(14) self.query.setFont(font) self.query.setTabStopWidth(20) self.highlighter = Highlighter(self.query.document()) # TODO select block of text - Ctrl+/ and they become comments self.completer = Completer() self.query.set_completer(self.completer.completer) # errors panel to show if query fails to execute properly self.errors_panel = QPlainTextEdit() font = self.query.font() font.setPointSize(12) self.errors_panel.setStyleSheet('color:red') self.errors_panel.setFont(font) self.errors_panel.hide() # splitter between the toolbar, query window, and the result set table splitter = QSplitter(Qt.Vertical) splitter.addWidget(self.gdb_browse_toolbar) splitter.addWidget(self.query) splitter.addWidget(self.table) splitter.addWidget(self.errors_panel) # add the settings after the widget have been added splitter.setCollapsible(0, True) splitter.setCollapsible(1, False) splitter.setCollapsible(2, False) splitter.setCollapsible(3, False) splitter.setStretchFactor(0, 3) splitter.setStretchFactor(1, 7) splitter.setSizes((100, 200, 300)) self.table.hide() # TOC self.toc = QTreeWidget() self.toc.setHeaderHidden(True) # second splitter between the TOC to the left and the query/table to the # right toc_splitter = QSplitter(Qt.Horizontal) toc_splitter.addWidget(self.toc) toc_splitter.addWidget(splitter) toc_splitter.setCollapsible(0, True) toc_splitter.setSizes((200, 800)) # set the TOC vs data panel main_layout.addWidget(toc_splitter) margins = QMargins() margins.setBottom(10) margins.setLeft(10) margins.setRight(10) margins.setTop(10) main_layout.setContentsMargins(margins) self.setLayout(main_layout) QApplication.setStyle(QStyleFactory.create('Cleanlooks')) self.show() return
def __init__(self): super().__init__() self.title('Text Editor') self.text_area = TextArea(self, bg="white", fg="black", undo=True) self.background = 'lightgrey' self.foreground = 'black' self.text_foreground = 'black' self.text_background = 'white' self.config_dir = os.path.join(str(Path.home()), '.tkedit') self.default_scheme_path = os.path.join(self.config_dir, 'schemes/default.yaml') self.python_language_path = os.path.join(self.config_dir, 'languages/python.yaml') self.font_scheme_path = os.path.join(self.config_dir, 'schemes/font.yaml') self.create_config_directory_if_needed() self.load_scheme_file(self.default_scheme_path) self.configure_ttk_elements() self.font_size = 15 self.font_family = "Ubuntu Mono" self.load_font_file(self.font_scheme_path) self.highlighter = Highlighter(self.text_area, self.python_language_path) self.menu = tk.Menu(self, bg=self.background, fg=self.foreground) self.all_menus = [self.menu] sub_menu_items = ['file', 'edit', 'tools', 'help'] self.generate_sub_menus(sub_menu_items) self.configure(menu=self.menu) self.right_click_menu = tk.Menu(self, bg='lightgrey', fg='black', tearoff=0) self.right_click_menu.add_command(label='Cut', command=self.edit_cut) self.right_click_menu.add_command(label='Copy', command=self.edit_copy) self.right_click_menu.add_command(label='Paste', command=self.edit_paste) self.all_menus.append(self.right_click_menu) self.open_file = None self.scrollbar = ttk.Scrollbar(orient="vertical", command=self.scroll_text) self.text_area.configure(yscrollcommand=self.scrollbar.set) self.line_numbers = LineNumbers(self, self.text_area, bg='grey', fg='white', width=1) ''' self.line_numbers = tk.Text(self, bg="grey", fg="yellow") first_100_numbers = [str(n+1) for n in range(100)] self.line_numbers.insert(1.0, "\n".join(first_100_numbers)) self.line_numbers.configure(state="disabled", width=3) ''' self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.line_numbers.pack(side=tk.LEFT, fill=tk.Y) self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) self.bind_events()
def __init__(self): QtGui.QMainWindow.__init__(self) self.doctree=None self.lineMarks={} # We put things we want rendered here self.render_queue = Queue() # We get things rendered back self.pdf_queue = Queue() # We get doctrees for the outline viewer self.doctree_queue = Queue() print('Starting background renderer...', end=' ') self.renderProcess=Process(target = renderQueue, args=(self.render_queue, self.pdf_queue, self.doctree_queue)) self.renderProcess.daemon=True self.renderProcess.start() print('DONE') # This is always the same self.ui=Ui_MainWindow() self.ui.setupUi(self) # Adjust column widths in the structure tree self.ui.tree.header().setStretchLastSection(False) self.ui.tree.header().setResizeMode(0, QtGui.QHeaderView.Stretch) self.ui.tree.header().setResizeMode(1, QtGui.QHeaderView.ResizeToContents) self.pdf=PDFWidget() self.ui.pageNum = QtGui.QSpinBox() self.ui.pageNum.setMinimum(1) self.ui.pageNum.setValue(1) self.connect(self.pdf,QtCore.SIGNAL('pageCount'), self.ui.pageNum.setMaximum) self.connect(self.pdf,QtCore.SIGNAL('pageChanged'), self.ui.pageNum.setValue) self.connect(self.ui.pageNum,QtCore.SIGNAL('valueChanged(int)'), self.pdf.gotoPage) self.ui.actionShow_ToolBar=self.ui.toolBar.toggleViewAction() self.ui.actionShow_ToolBar.setText("Show Main Toolbar") self.ui.menuView.addAction(self.ui.actionShow_ToolBar) self.ui.pdfbar.addAction(self.pdf.ui.previous) self.ui.pdfbar.addWidget(self.ui.pageNum) self.ui.pdfbar.addAction(self.pdf.ui.__next__) self.ui.pdfbar.addSeparator() self.ui.pdfbar.addAction(self.pdf.ui.zoomin) self.ui.pdfbar.addAction(self.pdf.ui.zoomout) self.ui.actionShow_PDFBar=self.ui.pdfbar.toggleViewAction() self.ui.actionShow_PDFBar.setText("Show PDF Toolbar") self.ui.menuView.addAction(self.ui.actionShow_PDFBar) self.ui.dockLayout.addWidget(self.ui.pdfbar) self.ui.dockLayout.addWidget(self.pdf) self.ui.dock.hide() self.ui.actionShow_PDF=self.ui.dock.toggleViewAction() self.ui.actionShow_PDF.setText('Show Preview') self.ui.menuView.addAction(self.ui.actionShow_PDF) self.ui.actionShow_Structure=self.ui.structure.toggleViewAction() self.ui.actionShow_Structure.setText('Show Document Outline') self.ui.menuView.addAction(self.ui.actionShow_Structure) self.text_md5='' self.style_md5='' self.hl1 = Highlighter(self.ui.text.document(),'rest') self.hl2 = Highlighter(self.ui.style.document(),'javascript') self.editorPos=QtGui.QLabel() self.ui.statusBar.addWidget(self.editorPos) self.editorPos.show() self.statusMessage=QtGui.QLabel() self.ui.statusBar.addWidget(self.statusMessage) self.statusMessage.show() self.on_text_cursorPositionChanged() self.on_actionRender_triggered() # Connect editing actions to the editors self.ui.text.undoAvailable.connect(self.ui.actionUndo1.setEnabled) self.ui.actionUndo1.triggered.connect(self.ui.text.undo) self.ui.text.redoAvailable.connect(self.ui.actionRedo1.setEnabled) self.ui.actionRedo1.triggered.connect(self.ui.text.redo) self.ui.text.copyAvailable.connect(self.ui.actionCopy1.setEnabled) self.ui.actionCopy1.triggered.connect(self.ui.text.copy) self.ui.text.copyAvailable.connect(self.ui.actionCut1.setEnabled) self.ui.actionCut1.triggered.connect(self.ui.text.cut) self.ui.actionPaste1.triggered.connect(self.ui.text.paste) self.ui.style.undoAvailable.connect(self.ui.actionUndo2.setEnabled) self.ui.actionUndo2.triggered.connect(self.ui.style.undo) self.ui.style.redoAvailable.connect(self.ui.actionRedo2.setEnabled) self.ui.actionRedo2.triggered.connect(self.ui.style.redo) self.ui.style.copyAvailable.connect(self.ui.actionCopy2.setEnabled) self.ui.actionCopy2.triggered.connect(self.ui.style.copy) self.ui.style.copyAvailable.connect(self.ui.actionCut2.setEnabled) self.ui.actionCut2.triggered.connect(self.ui.style.cut) self.ui.actionPaste2.triggered.connect(self.ui.style.paste) self.clipBoard=QtGui.QApplication.clipboard() self.clipBoard.changed.connect(self.clipChanged) self.hookEditToolbar(self.ui.text) self.clipChanged(QtGui.QClipboard.Clipboard) self.text_fname=None self.style_fname=None self.pdf_fname=None self.ui.searchbar.setVisible(False) self.ui.searchWidget=SearchWidget() self.ui.searchbar.addWidget(self.ui.searchWidget) self.ui.actionFind.triggered.connect(self.ui.searchbar.show) self.ui.actionFind.triggered.connect(self.ui.searchWidget.ui.text.setFocus) self.ui.searchWidget.ui.close.clicked.connect(self.ui.searchbar.hide) self.ui.searchWidget.ui.close.clicked.connect(self.returnFocus) self.ui.searchWidget.ui.next.clicked.connect(self.doFind) self.ui.searchWidget.ui.previous.clicked.connect(self.doFindBackwards) self.updatePdf() self.renderTimer=QtCore.QTimer() self.renderTimer.timeout.connect(self.on_actionRender_triggered) self.renderTimer.start(5000)
self.setExtraSelections(extraSelections) if __name__ == "__main__": try: import json except ImportError: import simplejson as json from highlighter import Highlighter app = QtGui.QApplication(sys.argv) js = CodeEditor() js.setWindowTitle('javascript') hl = Highlighter(js.document(), "javascript") js.show() def validateJSON(): style = str(js.toPlainText()) if not style.strip(): #no point in validating an empty string return pos = None try: json.loads(style) except ValueError: _, e, _ = sys.exc_info() s = str(e) print(s) if s == 'No JSON object could be decoded': pos = 0
def openFile(self): file = QtWidgets.QFileDialog.getOpenFileName(None, "Open File", "", "NW4F Shader Archive (*.sharc)")[0] if not (file and os.path.isfile(file)): return self.closeFile() self.fileLineEdit.setText(file) with open(file, 'rb') as inf: inb = inf.read() self.sharc.set(*sharc.load(inb), sharc.header) self.numPrograms = self.sharc.progList.len() self.codeFiles = [] for code in self.sharc.codeList: self.codeFiles.append(code.name) for program in self.sharc.progList: model = ShaderModel(self) model.vertexCode.addItems(self.codeFiles) model.fragmentCode.addItems(self.codeFiles) model.vertexCode.setCurrentIndex(program.vtxShIdx) model.fragmentCode.setCurrentIndex(program.frgShIdx) for i, macro in enumerate(program.vertexMacros): nameCell = QtWidgets.QTableWidgetItem() valueCell = QtWidgets.QTableWidgetItem() nameCell.setText(macro.name) valueCell.setText(macro.value) model.vertexMacros.setItem(i, 0, nameCell) model.vertexMacros.setItem(i, 1, valueCell) model.vertexMacros.setRowCount(i + 2) for i, macro in enumerate(program.fragmentMacros): nameCell = QtWidgets.QTableWidgetItem() valueCell = QtWidgets.QTableWidgetItem() nameCell.setText(macro.name) valueCell.setText(macro.value) model.fragmentMacros.setItem(i, 0, nameCell) model.fragmentMacros.setItem(i, 1, valueCell) model.fragmentMacros.setRowCount(i + 2) for i, sym in enumerate(program.uniformVariables): nameCell = QtWidgets.QTableWidgetItem() defaultValCell = QtWidgets.QTableWidgetItem() offsetCell = QtWidgets.QTableWidgetItem() symCell = QtWidgets.QTableWidgetItem() nameCell.setText(sym.variable.name) defaultValCell.setText(str(sym.variable.default)) offsetCell.setText(str(sym.variable.offset)) symCell.setText(sym.name) model.uniformVars.setItem(i, 0, nameCell) model.uniformVars.setItem(i, 1, defaultValCell) model.uniformVars.setItem(i, 2, offsetCell) model.uniformVars.setItem(i, 3, symCell) model.uniformVars.setRowCount(i + 2) for i, sym in enumerate(program.uniformBlocks): nameCell = QtWidgets.QTableWidgetItem() defaultValCell = QtWidgets.QTableWidgetItem() symCell = QtWidgets.QTableWidgetItem() nameCell.setText(sym.variable.name) defaultValCell.setText(str(sym.variable.default)) symCell.setText(sym.name) model.uniformBlocks.setItem(i, 0, nameCell) model.uniformBlocks.setItem(i, 1, defaultValCell) model.uniformBlocks.setItem(i, 3, symCell) model.uniformBlocks.setRowCount(i + 2) for i, sym in enumerate(program.samplerVariables): nameCell = QtWidgets.QTableWidgetItem() symCell = QtWidgets.QTableWidgetItem() nameCell.setText(sym.variable.name) symCell.setText(sym.name) model.samplerVars.setItem(i, 0, nameCell) model.samplerVars.setItem(i, 3, symCell) model.samplerVars.setRowCount(i + 2) for i, sym in enumerate(program.attribVariables): nameCell = QtWidgets.QTableWidgetItem() symCell = QtWidgets.QTableWidgetItem() nameCell.setText(sym.variable.name) symCell.setText(sym.name) model.vertexAttribs.setItem(i, 0, nameCell) model.vertexAttribs.setItem(i, 3, symCell) model.vertexAttribs.setRowCount(i + 2) modelItem = QtWidgets.QTreeWidgetItem(1) modelItem.setText(0, program.name) self.treeWidget.topLevelItem(0).addChild(modelItem) self.widgets.addWidget(model) for code in self.sharc.codeList: source = ShaderSource() highlighter = Highlighter(source.document()) source.setPlainText(code.code) sourceItem = QtWidgets.QTreeWidgetItem(2) sourceItem.setText(0, code.name) self.treeWidget.topLevelItem(1).addChild(sourceItem) self.widgets.addWidget(source) if self.numPrograms: self.treeWidget.topLevelItem(0).setExpanded(True) self.treeWidget.topLevelItem(0).child(0).setSelected(True) if self.sharc.codeList.len(): self.treeWidget.topLevelItem(1).setExpanded(True)
def __init__(self): super().__init__() self.ui = Ui_MainWindow() self.init_UI() # 界面绘制交给InitUi方法 self.file_status = FileStatus() self.highlighter = Highlighter(self.ui)
def add(self): current = self.treeWidget.currentItem() if current.type() == 0: index = self.treeWidget.indexOfTopLevelItem(current) else: index = current.type() - 1 if index == 0: name = QtWidgets.QInputDialog.getText(self, "Choose name", "Choose a name for this shader model (if exists, won't be added):", QtWidgets.QLineEdit.Normal)[0] if not name: return for i in range(self.treeWidget.topLevelItem(0).childCount()): modelItem = self.treeWidget.topLevelItem(0).child(i) if modelItem.text(0) == name: return model = ShaderModel(self) model.vertexCode.addItems(self.codeFiles) model.fragmentCode.addItems(self.codeFiles) model.vertexCode.setCurrentIndex(-1) model.fragmentCode.setCurrentIndex(-1) modelItem = QtWidgets.QTreeWidgetItem(1) modelItem.setText(0, name) self.treeWidget.topLevelItem(0).addChild(modelItem) self.widgets.addWidget(model) else: file = QtWidgets.QFileDialog.getOpenFileName(None, "Open File", "", "GLSL Shader (*.sh *.glsl)")[0] if not (file and os.path.isfile(file)): return name = os.path.basename(file) if name in self.codeFiles: return self.codeFiles.append(name) code = sharc.ShaderCode() code.name = name with open(file, encoding='utf-8') as inf: code.code = inf.read() self.sharc.codeList.append(code) source = ShaderSource() highlighter = Highlighter(source.document()) source.setPlainText(code.code) sourceItem = QtWidgets.QTreeWidgetItem(2) sourceItem.setText(0, code.name) self.treeWidget.topLevelItem(1).addChild(sourceItem) self.widgets.addWidget(source) for i in range(self.numPrograms): model = self.widgets.widget(i) vtxShIdx = model.vertexCode.currentIndex() model.vertexCode.clear() model.vertexCode.addItems(self.codeFiles) model.vertexCode.setCurrentIndex(vtxShIdx) frgShIdx = model.fragmentCode.currentIndex() model.fragmentCode.clear() model.fragmentCode.addItems(self.codeFiles) model.fragmentCode.setCurrentIndex(frgShIdx)
def __init__(self): super().__init__() self.title('Python Text Editor v3') self.geometry('800x600') self.foreground = 'black' self.background = 'lightgrey' self.text_foreground = '#313131' self.text_background = '#f0f0f0' self.terminal_background = 'darkcyan' self.terminal_foreground = 'white' self.config_dir = os.path.join(str(Path.home()), '.tkedit') self.default_scheme_path = os.path.join(self.config_dir, 'schemes/default.yaml') self.python_language_path = os.path.join(self.config_dir, 'languages/python.yaml') self.font_scheme_path = os.path.join(self.config_dir, 'schemes/font.yaml') self.create_config_directory_if_needed() self.load_scheme_file(self.default_scheme_path) self.configure_ttk_elements() # Change self.font_size = 14 self.font_family = "Droid Sana Mono" self.terminal_font_size = 12 self.terminal_font_family = "Consolas" # Change self.load_font_file(self.font_scheme_path) self.text_area = TextArea(self, bg=self.text_background, fg=self.text_foreground, undo=True, font=(self.font_family, self.font_size)) self.scrollbar = ttk.Scrollbar(orient="vertical", command=self.scroll_text) self.text_area.configure(yscrollcommand=self.scrollbar.set) self.line_numbers = LineNumbers(self, self.text_area, bg="grey", fg="white", width=1, font=(self.font_family, self.font_size)) self.highlighter = Highlighter(self.text_area, self.python_language_path) self.terminal = Terminal(self, height=8, bg=self.terminal_background, fg=self.terminal_foreground, undo=True, font=(self.terminal_font_family, self.terminal_font_size)) self.menu = tk.Menu(self, bg=self.background, fg=self.foreground) self.all_menus = [self.menu] self.text_area.__setattr__("update_line", self.line_numbers.force_update) self.text_area.__setattr__("update_highlight", self.highlighter.force_highlight) sub_menu_items = ["file", "edit", "tools", "help"] self.generate_sub_menus(sub_menu_items) self.configure(menu=self.menu) self.right_click_menu = tk.Menu(self, bg=self.background, fg=self.foreground, tearoff=0) self.right_click_menu.add_command(label='Cut', command=self.edit_cut) self.right_click_menu.add_command(label='Copy', command=self.edit_copy) self.right_click_menu.add_command(label='Paste', command=self.edit_paste) # Change self.right_click_menu.add_command(label='Undo', command=self.edit_undo) self.right_click_menu.add_command(label='Redo', command=self.edit_redo) # Change self.all_menus.append(self.right_click_menu) # change self.count_area = tk.Text(self, height=1) self.count_area.pack(side=tk.BOTTOM, fill=tk.X) # change # Change self.terminal.pack(side=tk.BOTTOM, fill=tk.X) # Change self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.line_numbers.pack(side=tk.LEFT, fill=tk.Y) self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) self.bind_events() self.open_file = ''
def __init__(self): ''' @update 1.添加横向滚动条 2.修正行号与滚动条和窗口的关联 3.修正行号显示 ''' super().__init__() self.title('Python Text Editor v3') self.geometry('800x600') self.foreground = 'black' self.background = 'lightgrey' self.text_foreground = 'black' self.text_background = 'white' self.config_dir = os.path.join(str(Path.home()), '.tkedit') self.default_scheme_path = os.path.join(self.config_dir, 'schemes/default.yaml') self.python_language_path = os.path.join(self.config_dir, 'languages/python.yaml') self.none_language_path = os.path.join(self.config_dir, 'languages/None.yaml') self.font_scheme_path = os.path.join(self.config_dir, 'fonts/font.yaml') self.create_config_directory_if_needed() self.load_scheme_file(self.default_scheme_path) self.configure_ttk_elements() self.font_size = 15 self.font_family = "Ubuntu Mono" self.load_font_file(self.font_scheme_path) self.text_area = TextArea(self, bg=self.text_background, fg=self.text_foreground, undo=True, font=(self.font_family, self.font_size)) self.scrollbar = ttk.Scrollbar(orient="vertical", command=self.text_area.yview) self.scrollbar2 = ttk.Scrollbar(orient="horizontal", command=self.text_area.xview) self.line_numbers = LineNumbers(self, self.text_area, bg="grey", fg="white", width=1, font=(self.font_family, self.font_size)) self.scrollbar.config(command=self.text_area.yview) self.text_area.config(yscrollcommand=self.scrollbar.set, xscrollcommand=self.scrollbar2.set) self.highlighter = Highlighter(self.text_area, self.none_language_path) self.menu = tk.Menu(self, bg=self.background, fg=self.foreground) self.all_menus = [self.menu] sub_menu_items = ["file", "edit", "tools", "help"] self.generate_sub_menus(sub_menu_items) self.configure(menu=self.menu) self.right_click_menu = tk.Menu(self, bg=self.background, fg=self.foreground, tearoff=0) self.right_click_menu.add_command(label='Cut', command=self.edit_cut) self.right_click_menu.add_command(label='Copy', command=self.edit_copy) self.right_click_menu.add_command(label='Paste', command=self.edit_paste) self.all_menus.append(self.right_click_menu) self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.scrollbar2.pack(side=tk.BOTTOM, fill=tk.X) self.line_numbers.pack(side=tk.LEFT, fill=tk.Y) self.text_area.pack(side=tk.LEFT, fill=tk.BOTH, expand=1) self.bind_events() self.open_file = ''