PySide, QTextEdit Append 添加空行

Posted

技术标签:

【中文标题】PySide, QTextEdit Append 添加空行【英文标题】:PySide, QTextEdit Append adding blank lines 【发布时间】:2013-03-06 11:22:39 【问题描述】:

我有这个简单的代码:基本上是一个向 cmd 发送一些命令并在 QTextEdit 中显示 cmd 输出的工具。 基本上,它有效。 我遇到的唯一问题是每次单击发送(有或没有新命令)时,都会附加文本,但 QTextEdit 的末尾会出现奇怪的空行。即使我清除“控制台”,仍然有这些行。 也许这与我调用过程的方式有关,我不知道因此需要帮助。

from PySide.QtCore import *
from PySide.QtGui import *
import sys


class MyWindow(QDialog):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.setWindowTitle("Send to CMD")

        self.check1 = QCheckBox("Activate Variable")
        self.variable = QLineEdit()
        self.finalcommand = QLineEdit()
        self.clearCommand = QPushButton("Clear")
        self.sendCommand = QPushButton("Send")
        self.clearOnSend = QCheckBox("Clear on Send")

        self.process = QProcess()
        self.console = QTextEdit(self)

        layout = QVBoxLayout()
        layout.addWidget(self.check1)
        layout.addWidget(self.variable)
        layout.addWidget(self.finalcommand)
        layout.addWidget(self.clearOnSend)
        layout.addWidget(self.clearCommand)
        layout.addWidget(self.sendCommand)
        layout.addWidget(self.console)
        self.setLayout(layout)

        self.connect(self.check1, SIGNAL("clicked()"), self.appendText)
        self.variable.textChanged.connect(self.appendText)

        self.clearCommand.clicked.connect(self.Clear)
        self.sendCommand.clicked.connect(self.Send)

    def appendText(self):
        if self.check1.isChecked():
            TEXT1 = "Dir" + ' ' + str(self.variable.text())
        else:
            TEXT1 = ""
        self.finalcommand.setText(str(TEXT1))

    def Clear(self):
        if self.clearCommand.isEnabled():
            self.console.clear()

    def Send(self):
        if self.clearOnSend.isChecked():
            self.console.clear()
        FCTS = "cmd.exe /c" + " " + str(self.finalcommand.text())
        self.process.readyReadStandardOutput.connect(self.readConsole)
        self.process.start(FCTS)
        if not self.process.waitForStarted(0):
            return False
        if not self.process.waitForFinished(0):
            return False

    def readConsole(self):
        #self.console.setText(str(self.process.readAllStandardOutput()))
        self.console.append(str(self.process.readAllStandardOutput()))



app = QApplication(sys.argv)
form = MyWindow()
form.show()
app.exec_()

【问题讨论】:

也许可以试试 def readConsole(self): Ba = self.process.readAllStandardOutput() QString s = Ba self.console.append(s) 感谢您提供帮助,但您的解决方案确实返回了同样的问题 可能字符串中有垃圾值,请尝试使用内置的 string.strip() 功能 我遇到了同样的问题....有什么解决办法吗? 【参考方案1】:

您可能想使用 string.rstrip() 函数而不是 string.strip()

【讨论】:

也不工作。我认为问题不在于剥离字符,而在于读取和写入过程的方式。还是谢谢【参考方案2】:

如果你改变了

self.console.append(str(self.process.readAllStandardOutput()))

self.console.append(str([self.process.readAllStandardOutput()]))

你可以看到发生了什么,希望这会有所帮助

【讨论】:

似乎每次我发送命令时都会在 textEdit 的末尾添加 [PySide.QtCore.QByteArray('')],因此出现空行。我会深入研究它。感谢您的提示;) 其实我找到了解决办法。我花了很多时间,但它是如此明显!真丢人。该进程是在 def__init 上创建的。我从那里删除它并在 def Send(self) 中创建它:现在至少一切似乎都按应有的方式工作。【参考方案3】:
def appendText(self):
    if self.check1.isChecked():
        TEXT1 = "Dir" + ' ' + str(self.variable.text())
    else:
        TEXT1 = ""

你必须在 else 之后删除最后一行,然后输入 pass 这样就不会追加新的空行了

def appendText(self):
    if self.check1.isChecked():
        TEXT1 = "Dir" + ' ' + str(self.variable.text())
    else:
        pass

【讨论】:

以上是关于PySide, QTextEdit Append 添加空行的主要内容,如果未能解决你的问题,请参考以下文章

PyQt 或 PySide:QTextEdit 取消全选

pyside QTextEdit 选中文本事件

检查 QTextEdit 中所选文本的格式 - PySide6

Pyside 同时滚动两个 qtextedits

为 keyPressEvent 子类化 QTextEdit 是唯一的方法吗?

Pyside:多个 QProcess 输出到 TextEdit