PyQt:类似于控制台的接口,作为QTextEdit子类

时间:2014-02-06 05:25:53

标签: python python-2.7 pyqt pyqt4 qtextedit

我是一个新手,试图使用PyQt4编写一个Z-machine解释器 - 一个专门用于文本冒险的虚拟机,如Zork - 在Python中。我决定将QTextEdit子类化为程序的主界面,但我无法将其转换为可以完成我正在寻找的小部件。我必须能够向其附加文本,接受与最后一个附加字符在同一行上的用户输入,然后附加更多文本,并且绝不允许用户编辑以前由程序附加或由用户。换句话说,我必须定期使窗口小部件中的所有文本只读取之外的用户在其末尾键入的新文本。这是我最近尝试过的代码:

class ZScreen(QTextEdit):
    def __init__(self,  parent=None):
        super(QTextEdit, self).__init__(parent)
        self.setUndoRedoEnabled(False)
        self.setAcceptRichText(False)
        self.readOnlyBefore = self.textCursor().position
    def changeEvent(self, e):
        if self.textCursor().position < self.readOnlyBefore:
            self.setReadOnly(True)
        else:
            self.setReadOnly(False)
        super(QTextEdit, self).changeEvent(e)
    def printTo(self, text):
        self.append(text)
        self.moveCursor(QTextCursor.End)
        self.readOnlyBefore = self.textCursor().position

1 个答案:

答案 0 :(得分:0)

你能有两个文本窗口:一个只读已写入的文本,另一个用户可以键入新文本?当按下输入文本时解释,如果您的程序可以使用它,则文本将附加到只读文本小部件。