Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在PyQt4中获取QTextEdit中光标旁边的文本_Python_Pyqt_Pyqt4_Qtextedit - Fatal编程技术网

Python 如何在PyQt4中获取QTextEdit中光标旁边的文本

Python 如何在PyQt4中获取QTextEdit中光标旁边的文本,python,pyqt,pyqt4,qtextedit,Python,Pyqt,Pyqt4,Qtextedit,我正在为bash脚本制作一个轻量级的IDE,我想要一个选项,当我按下Ctrl+/>>时,我的“textCursor”所在的一行就会显示出来 注释,我已经设法做到了,但我也想取消注释 使用相同的命令行。但我无法在旁边获取文本 “文本光标” def commentShortcut(self): cursor = self.textCursor() Y = cursor.blockNumber() self.moveCursor(QtGui.QTextCursor.End)

我正在为bash脚本制作一个轻量级的IDE,我想要一个选项,当我按下Ctrl+/>>时,我的“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("#")
这部分代码将文本光标移动到该行的开头 在此处插入带有self.insertPlainText的注释符号 功能

注意:类继承了QTextEdit,这就是为什么我要继承它 只与自己一起使用它

总之,我只需要一个方法来检查textCursor旁边的字符 如果这个角色是,我会移除它,如果不是,那么
我将插入新的任何帮助将被认可。

你必须移动到行的开头,然后跳过空白,选择第一个字符并比较它,然后对于移除过程,你必须把右边的空白和空白去掉,对于插入,建议插入

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 < $1
# remember the name of the input file
in=$1

# 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_())