2013-03-06 172 views
1

我有这个简单的代码:基本上是一个工具来发送一些命令到CMD,并显示在QTextEdit cmd的输出。 基本上,它的工作原理。 我唯一的问题是,每次点击发送(有或没有新命令)时,文本都被追加了,但奇怪的空白行出现在QTextEdit的末尾。即使我清除“控制台”,仍然有这些线。 也许它与我称之为过程的方式有关,因此我不知道需要帮助。PySide,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_() 
+0

也许tr Ÿ 高清readConsole(个体经营): BA = self.process.readAllStandardOutput() QString的S =巴 self.console.append(S) – Saurabh7 2013-03-10 06:54:41

+0

感谢提供帮助但您的解决方案不会返回同样的问题 – Abe 2013-03-10 11:56:15

+0

也许有垃圾值与字符串,尝试使用内置的string.strip()功能 – Saurabh7 2013-03-11 06:57:25

回答

0

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

+0

也无法正常工作。我认为问题不在于剥离字符,而在于读取和写入过程的方式。 无论如何感谢 – Abe 2013-03-17 11:26:09

0

如果你改变

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

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

可以看看发生了什么,希望这可以帮助

+0

似乎每次我发送一个命令,因此空白行出现时,[PySide.QtCore.QByteArray('')]添加在textEdit的末尾。 我会深入研究它。感谢您的提示;) – Abe 2013-03-17 19:01:06

+0

其实,我找到了解决方案。我花了这么多时间,但它非常明显!对我感到羞耻。 进程在def__init上创建。 我从那里删除它并在def中创建发送(self): 现在至少一切似乎都按照它应该的方式工作。 – Abe 2013-03-22 01:25:58