#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from highlighter import MyHighlighter
from highlighter import HighlightingRule
class CodeEditor(QPlainTextEdit):
def __init__(self, parent = None):
QPlainTextEdit.__init__(self, parent)
self.lineNumberArea = LineNumberArea(self)
self.connect(self, SIGNAL('blockCountChanged(int)'), \
self.updateLineNumberAreaWidth)
self.connect(self, SIGNAL('updateRequest(const QRect &, int)'), \
self.updateLineNumberArea)
self.connect(self, SIGNAL('cursorPositionChanged()'), \
self.highlightCurrentLine)
self.updateLineNumberAreaWidth(0)
self.highlightCurrentLine()
def highlightCurrentLine(self):
extraSelections = QTextEdit.extraSelections(QTextEdit())
if not self.isReadOnly():
selection = QTextEdit.ExtraSelection()
lineColor = QColor(Qt.yellow).lighter(160)
selection.format.setBackground(lineColor)
selection.format.setProperty(QTextFormat.FullWidthSelection, True)
selection.cursor = self.textCursor()
selection.cursor.clearSelection()
extraSelections.append(selection)
self.setExtraSelections(extraSelections)
def lineNumberAreaWidth(self):
digits = 1
Max = max(1, self.blockCount())
while (Max >= 10) :
Max /= 10
digits += 1
space = 3 + self.fontMetrics().width('9') * digits
return space
def updateLineNumberAreaWidth(self, newBlockCount):
self.setViewportMargins(self.lineNumberAreaWidth(), 0, 0, 0)
def updateLineNumberArea(self, rect, dy):
if dy:
self.lineNumberArea.scroll(0, dy)
else:
self.lineNumberArea.update(0, rect.y(), \
self.lineNumberAreaWidth(), \
rect.height())
if (rect.contains(self.viewport().rect())):
self.updateLineNumberAreaWidth(0)
def resizeEvent(self, e):
QPlainTextEdit.resizeEvent(self, e)
cr = self.contentsRect()
self.lineNumberArea.setGeometry(QRect(cr.left(), cr.top(), \
self.lineNumberAreaWidth(), \
cr.height()))
def lineNumberAreaPaintEvent(self, event):
painter = QPainter(self.lineNumberArea)
rect = event.rect()
painter.fillRect(rect, Qt.lightGray)
block = self.firstVisibleBlock()
blockNumber = block.blockNumber()
top = int(self.blockBoundingGeometry(block).translated(\
self.contentOffset()).top())
bottom = top + int(self.blockBoundingRect(block).height())
while (block.isValid() and top <= rect.bottom()):
if (block.isVisible() and bottom >= rect.top()):
number = QString.number(blockNumber + 1)
painter.setPen(Qt.black)
painter.drawText(0, top, self.lineNumberArea.width(), \
self.fontMetrics().height(), \
Qt.AlignRight, number)
block = block.next()
top = bottom
bottom = top + int(self.blockBoundingRect(block).height())
blockNumber += 1
class LineNumberArea(QWidget):
def __init__(self, editor):
QWidget.__init__(self, editor)
self.codeEditor = editor
def sizeHint(self):
return QSize(codeEditor.lineNumberAreaWidth(), 0)
def paintEvent(self, event):
self.codeEditor.lineNumberAreaPaintEvent(event)
def main():
app = QApplication(sys.argv)
editor = CodeEditor()
editor.setWindowTitle('Code Editor Example')
editor.show()
app.exec_()
if __name__ == '__main__':
main()
分享到:
相关推荐
### Windows下安装PyQt4详解 #### 一、前言 在Windows环境下安装PyQt4是许多使用Python进行GUI开发的开发者必须掌握的基本技能之一。本文将详细介绍如何在Windows操作系统中顺利安装PyQt4,并通过实际操作验证安装...
PyQt4是Python编程语言中一个非常重要的图形用户界面(GUI)工具包,它是Qt库的一个Python绑定。这个工具包允许开发者使用Python语言创建出功能丰富的桌面应用。本资源提供了PyQT4在Linux和Windows平台上的源代码,...
PyQt4的例子代码是学习和理解这个库功能的关键资源,因为它包含了一系列的示例程序,覆盖了PyQt4中的各种组件和功能。 这些例子源码可以帮助开发者直观地了解如何使用PyQt4的各种部件,如按钮、文本框、菜单、...
**PyQt4 框架详解** PyQt4 是一个 Python 模块,它提供了对 Qt 库的接口,使得 Python 开发者可以利用 Qt 的强大功能构建图形用户界面(GUI)应用程序。Qt 库是跨平台的 C++ 库,广泛应用于桌面、移动和嵌入式设备...
PyQt4是一款强大的Python图形用户界面工具包,它基于Qt库,使得开发者能够用Python语言构建功能丰富的桌面应用。这个压缩包包含三份珍贵的学习资源,分别是“PyQt4精彩实例分析”、“PyQt4入门指南”以及“零基础学...
PyQt4是一个强大的Python绑定库,它允许Python程序员利用Qt应用程序框架和库。这个特定的安装包是"PyQt4-4.11.4-cp27-cp27m-win_amd64.7z",适用于Python 2.7版本且是64位的Windows操作系统。这个版本的PyQt4是...
### PyQt4工具包知识点详解 #### 1. PyQt4简介 - **定义**: PyQt4是一个用于创建GUI(图形用户界面)应用程序的工具包。它结合了Python编程语言和强大的Qt库,后者是世界上最优秀的GUI库之一。 - **官方网址**: ...
PyQt4是一个强大的Python绑定库,它为Python程序员提供了对Qt库的访问,Qt库是Qt公司开发的一个跨平台的应用程序开发框架。标题中的"PyQt4-4.11.4-cp27-cp27m-win_amd64"表明这是针对Python 2.7版本、采用CPython...
PYQT4是一个强大的Python库,用于创建图形用户界面(GUI)应用程序。它是Qt库的Python绑定,由Trolltech(现为The Qt Company)开发,提供了丰富的组件和功能,使得开发者能够轻松地构建桌面应用。在Python 2.7及更...
**PyQt4与Eric4简介** PyQt4是一款强大的Python绑定库,它是Qt库的Python版本,由英国的Riverbank Computing公司开发并维护。Qt库是C++编写的一个跨平台的应用程序开发框架,广泛用于创建桌面和移动应用程序,支持...
**PyQt4 入门教程概述** PyQt4 是一个基于 Python 的图形用户界面(GUI)工具包,它使得 Python 开发者能够利用 Qt 库创建功能丰富的桌面应用程序。Qt 库是由 Qt Company 开发的,它是一个跨平台的 C++ 库,支持 ...
PyQt4是一个强大的Python绑定库,它为Qt应用程序框架提供了接口。这个库使得开发者能够用Python语言编写出具有丰富的用户界面的应用程序。在PyQt4中,Model/View编程模式是一个核心概念,它分离了数据的逻辑表示和其...
PyQt4是一个强大的Python绑定库,它将Qt应用程序框架与Python编程语言紧密集成。这个"PyQt4_gpl_win 4.12.3"版本是针对Windows平台的,并且遵循GNU General Public License (GPL)。它不是直接的可执行安装包,而是...
PyQt4是一个强大的工具包,它允许Python程序员利用Qt库创建功能丰富的图形用户界面(GUI)应用程序。这个压缩包“PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32”是专门为在32位系统上运行Python 2.7设计的PyQt4版本,版本号...
PyQt5和PyQt4差别中文版预览,值得关注
标题中的"PyQt4-4.11.4-cp37-cp37m-win_amd64.zip"指的是一个Python的GUI库PyQt4的特定版本,用于64位的Windows操作系统。这个版本是4.11.4,且已适配Python 3.7(表示为cp37)。"cp37m"代表的是Python的编译器标识...
标题“PyQt4_py2.7_x64_jb51”指的是一个针对Python 2.7和64位操作系统的PyQt4安装包。PyQt4是Python编程语言的一个模块,它允许开发者使用Qt库来创建图形用户界面(GUI)应用程序。这个版本的PyQt4是基于GPL许可的...
### PyQt4 学习教程知识点概述 #### 一、PyQt4简介 - **定义**:PyQt4是一款用于创建图形用户界面(GUI)的应用程序工具包,它将Python与强大的Qt库结合在一起。Qt库因其强大而广受赞誉,被认为是在地球上最强大的...
在Python的GUI编程中,PyQt4是一个非常重要的库,它提供了丰富的功能,使得开发者能够构建功能强大的桌面应用程序。PyQt4是Python绑定到Qt库的版本,Qt库本身是用C++编写的,但通过PyQt4,我们可以用Python语言来...
**PyQt4 框架详解** PyQt4 是一个 Python 模块,它使得 Python 程序员能够利用 Qt 库进行图形用户界面(GUI)编程。Qt 是一个跨平台的应用程序开发框架,由 C++ 编写,而 PyQt4 则是将 Qt 库与 Python 语言相结合的...