如何在 PyQt4 的 QTextEdit 中获取光标旁边的文本
How to get text next to cursor in QTextEdit in PyQt4
我正在为 bash 脚本制作灯光 IDE,我想要一个选项,当我按下 Ctrl + / >> 我的 'textCursor' 所在的一行将是
评论了,我已经做到了,但我也想取消评论
行与相同的命令。但我无法在旁边收到文字
'textCursor'.
def commentShortcut(self):
cursor = self.textCursor()
Y = cursor.blockNumber()
self.moveCursor(QtGui.QTextCursor.End)
cursor = QtGui.QTextCursor(self.document().findBlockByLineNumber(Y))
self.setTextCursor(cursor)
self.insertPlainText("#")
这部分代码将我的 textCursor 移动到该行的开头
我用 self.insertPlainText() 插入'#'(注释符号)
功能。
注意:class 继承了 QTextEdit 这就是我的原因
仅与 self.
一起使用
总而言之,我只需要一种方法来检查 textCursor 旁边的字符
如果那个字符是'#'我会删除它,如果不是,那么
我将插入新的“#”,我们将不胜感激。
你必须移动到行首,然后跳过空格,select 第一个字符并比较它,然后对于删除过程你必须删除 "#"
和空格右边空格,插入建议插入"# "
Ps:我无法尝试快捷键 Ctrl + /我使用的是:Ctrl + R
import sys
from PyQt4 import QtCore, QtGui
class TextEdit(QtGui.QTextEdit):
def __init__(self, *args, **kwargs):
QtGui.QWidget.__init__(self, *args, **kwargs)
shortcut = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+R"), self)
shortcut.activated.connect(self.commentShortcut)
def commentShortcut(self):
pos = self.textCursor().position()
self.moveCursor(QtGui.QTextCursor.StartOfLine)
line_text = self.textCursor().block().text()
if self.textCursor().block().text().startswith(" "):
# skip the white space
self.moveCursor(QtGui.QTextCursor.NextWord)
self.moveCursor(QtGui.QTextCursor.NextCharacter,QtGui.QTextCursor.KeepAnchor)
character = self.textCursor().selectedText()
if character == "#":
# delete #
self.textCursor().deletePreviousChar()
# delete white space
self.moveCursor(QtGui.QTextCursor.NextWord,QtGui.QTextCursor.KeepAnchor)
self.textCursor().removeSelectedText()
else:
self.moveCursor(QtGui.QTextCursor.PreviousCharacter,QtGui.QTextCursor.KeepAnchor)
self.textCursor().insertText("# ")
cursor = QtGui.QTextCursor(self.textCursor())
cursor.setPosition(pos)
self.setTextCursor(cursor)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = TextEdit()
w.append('''
#!/bin/bash
# Simple line count example, using bash
#
# Bash tutorial: http://linuxconfig.org/Bash_scripting_Tutorial#8-2-read-file-into-bash-array
# My scripting link: http://www.macs.hw.ac.uk/~hwloidl/docs/index.html#scripting
#
# Usage: ./line_count.sh file
# -----------------------------------------------------------------------------
# Link filedescriptor 10 with stdin
exec 10<&0
# stdin replaced with a file supplied as a first argument
exec <
# remember the name of the input file
in=
# init
file="current_line.txt"
let count=0
# this while loop iterates over all lines of the file
while read LINE
do
# increase line counter
((count++))
# write current line to a tmp file with name $file (not needed for counting)
echo $LINE > $file
# this checks the return code of echo (not needed for writing; just for demo)
if [ $? -ne 0 ]
then echo "Error in writing to file ${file}; check its permissions!"
fi
done
echo "Number of lines: $count"
echo "The last line of the file is: `cat ${file}`"
# Note: You can achieve the same by just using the tool wc like this
echo "Expected number of lines: `wc -l $in`"
# restore stdin from filedescriptor 10
# and close filedescriptor 10
exec 0<&10 10<&-
''')
w.show()
sys.exit(app.exec_())
我正在为 bash 脚本制作灯光 IDE,我想要一个选项,当我按下 Ctrl + / >> 我的 'textCursor' 所在的一行将是 评论了,我已经做到了,但我也想取消评论 行与相同的命令。但我无法在旁边收到文字 'textCursor'.
def commentShortcut(self):
cursor = self.textCursor()
Y = cursor.blockNumber()
self.moveCursor(QtGui.QTextCursor.End)
cursor = QtGui.QTextCursor(self.document().findBlockByLineNumber(Y))
self.setTextCursor(cursor)
self.insertPlainText("#")
这部分代码将我的 textCursor 移动到该行的开头 我用 self.insertPlainText() 插入'#'(注释符号) 功能。
注意:class 继承了 QTextEdit 这就是我的原因 仅与 self.
一起使用总而言之,我只需要一种方法来检查 textCursor 旁边的字符 如果那个字符是'#'我会删除它,如果不是,那么 我将插入新的“#”,我们将不胜感激。
你必须移动到行首,然后跳过空格,select 第一个字符并比较它,然后对于删除过程你必须删除 "#"
和空格右边空格,插入建议插入"# "
Ps:我无法尝试快捷键 Ctrl + /我使用的是:Ctrl + R
import sys
from PyQt4 import QtCore, QtGui
class TextEdit(QtGui.QTextEdit):
def __init__(self, *args, **kwargs):
QtGui.QWidget.__init__(self, *args, **kwargs)
shortcut = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+R"), self)
shortcut.activated.connect(self.commentShortcut)
def commentShortcut(self):
pos = self.textCursor().position()
self.moveCursor(QtGui.QTextCursor.StartOfLine)
line_text = self.textCursor().block().text()
if self.textCursor().block().text().startswith(" "):
# skip the white space
self.moveCursor(QtGui.QTextCursor.NextWord)
self.moveCursor(QtGui.QTextCursor.NextCharacter,QtGui.QTextCursor.KeepAnchor)
character = self.textCursor().selectedText()
if character == "#":
# delete #
self.textCursor().deletePreviousChar()
# delete white space
self.moveCursor(QtGui.QTextCursor.NextWord,QtGui.QTextCursor.KeepAnchor)
self.textCursor().removeSelectedText()
else:
self.moveCursor(QtGui.QTextCursor.PreviousCharacter,QtGui.QTextCursor.KeepAnchor)
self.textCursor().insertText("# ")
cursor = QtGui.QTextCursor(self.textCursor())
cursor.setPosition(pos)
self.setTextCursor(cursor)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = TextEdit()
w.append('''
#!/bin/bash
# Simple line count example, using bash
#
# Bash tutorial: http://linuxconfig.org/Bash_scripting_Tutorial#8-2-read-file-into-bash-array
# My scripting link: http://www.macs.hw.ac.uk/~hwloidl/docs/index.html#scripting
#
# Usage: ./line_count.sh file
# -----------------------------------------------------------------------------
# Link filedescriptor 10 with stdin
exec 10<&0
# stdin replaced with a file supplied as a first argument
exec <
# remember the name of the input file
in=
# init
file="current_line.txt"
let count=0
# this while loop iterates over all lines of the file
while read LINE
do
# increase line counter
((count++))
# write current line to a tmp file with name $file (not needed for counting)
echo $LINE > $file
# this checks the return code of echo (not needed for writing; just for demo)
if [ $? -ne 0 ]
then echo "Error in writing to file ${file}; check its permissions!"
fi
done
echo "Number of lines: $count"
echo "The last line of the file is: `cat ${file}`"
# Note: You can achieve the same by just using the tool wc like this
echo "Expected number of lines: `wc -l $in`"
# restore stdin from filedescriptor 10
# and close filedescriptor 10
exec 0<&10 10<&-
''')
w.show()
sys.exit(app.exec_())