【问题标题】:PyQt: Console-like interface as a QTextEdit subclassPyQt:作为 QTextEdit 子类的类似控制台的界面
【发布时间】:2014-02-06 05:25:53
【问题描述】:

我是一个新手,正在尝试使用 PyQt4 在 Python 中编写一个 Z 机器解释器——一个专门用于像 Zork 这样的文本冒险的虚拟机。我决定将 QTextEdit 子类化为程序的主界面,但我无法将它变成一个可以满足我要求的小部件。我必须能够向其附加文本,在与最后一个附加字符相同的行上接受用户输入,然后附加更多文本,并且绝不允许用户编辑以前由程序附加或输入的任何文本用户。换句话说,对于用户在其末尾键入的新文本,我必须定期将小部件中的所有文本设置为只读 except。这是我最近尝试过的代码:

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

【问题讨论】:

  • 我正在考虑在 QTextBrowser 上显示 QLineEdit,然后在返回时将其替换为附加到 QTextBrowser 的文本。
  • 我终于意识到我可以在 Github 上的所有公共 Python 代码中搜索关键字,并找到了 a QTextEdit subclass by Karel Klíč,这几乎完全符合我的要求。

标签: python python-2.7 pyqt pyqt4 qtextedit


【解决方案1】:

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

【讨论】:

  • 我会这样做,除非它是 VM 的非标准行为,并且使用我的应用程序的人会不高兴。
猜你喜欢
  • 2015-09-06
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 2022-01-24
  • 2012-01-10
相关资源
最近更新 更多