我正在PySide中創建一個應用程序,我想添加一個控制檯/終端屏幕,在這裏你有一個提示符,你可以輸入命令。我將如何能夠做到這一點。我猜測輸出的QPlainTextEdit/QTextEdit和實際提示的QLineEdit的組合。有一個更好的方法嗎?終端在PySide中的應用程序
3
A
回答
0
你可以看看Spyder。他們使用PyQt(這是相似的),並有一個終端。我想你可以導入他們的終端小部件,但我沒有玩過它。
https://code.google.com/p/spyderlib/
而且,這是我最喜歡的Python編輯迄今爲止!
我花了一段時間試圖找到像這樣的東西,但無濟於事。祝你好運!
0
我用一個自定義的QPlainTextEdit和自定義的QLineEdit來做到這一點。我還有一個指示標籤,可以在終端上顯示「>>>」以顯示用戶輸入。它需要更多的工作。最好的方法是創建基於QTextEdit和您自己的io處理程序的自定義小部件。下面是我的執行方法的一個例子,self.input是QLineEdit,self.view是QTextEdit。它應該爲你提供一般的想法。
import io, subprocess, shlex, code, rlcompleter, platform
def execute(self, currentText=None):
"""Execute runs the command given based on the console type.
If the console type is "both" then execute will run python commands
unless the user give the input ::os::command or ("::(platform.syste())::command").
Otherwise the console type will determine the what the input will execute with.
Args:
currentText(str): Text to execute. None will run the text from the QLineEdit self.input.
"""
# Check for given text
if currentText is None:
currentText = self.input.text()
self.input.clear()
self.view.display(currentText, "input")
else:
cmd = re.search("^>>>", currentText) # search for start only
if cmd is None:
currentText = ">>>" + currentText
else:
self.view.display(currentText, "input")
# end
# Variables
self.completer.clear()
cmdString = re.sub("^>>>", "", currentText)
result = None
displayType = "output"
run, cmdString = self.getRunType(cmdString)
try:
# Check where the output is going
sys.stdout = self.out = io.StringIO()
sys.stderr = sys.stdout
if run == "python": # Run python command
result = self._runInterpreter(cmdString)
displayType = "python"
elif run == "os": # Run os command
result = self._runSubprocess(cmdString)
displayType = "os"
except Exception as err:
result = str(err)
displayType = "Error"
notFoundPython = "NameError:" in result and "is not defined" in result
notFoundWindows = "returned non-zero exit status" in result
if notFoundPython or notFoundWindows:
result = "Command not found"
finally:
sys.stdout = self.old_stdout
sys.stderr = self.old_stdout
self.display(result, displayType)
# end execute
def getRunType(self, cmdString):
run = self._consoleType
# Check the run type
if self._consoleType == "both":
if re.search("^::python::", cmdString) is not None:
cmdString = re.sub("^::[a-z]*::", "", cmdString)
run = "python"
elif re.search("^(::os::|::"+platform.system()+"::)", cmdString) is not None:
cmdString = re.sub("^::[a-z]*::", "", cmdString)
run = "os"
else:
run = "python"
# end
return run, cmdString
# end getRunType
def _runInterpreter(self, cmdString, outIO=None, run=None):
# Check for a proper console type
if(self._consoleType != "both" and self._consoleType != "python"):
return
# Get the IO
if outIO is None:
outIO = sys.stdout
# Run python command
self.interpreter.push(cmdString)
# Check outIO
result = "Unreadable buffer: Check python's sys.stdout"
if isinstance(outIO, io.StringIO):
result = outIO.getvalue()
else:
if outIO.readable():
result = str(outIO.readlines())
# Check for error
if re.search("^Traceback", result) or re.search("[a-zA-z]*Error:", result):
raise ValueError(result)
return result
# end _runInterpreter
def _runSubprocess(self, cmdString, run=None):
# Check for a proper console type
if(self._consoleType != "both" and self._consoleType != "os"):
return
# Run OS command
cmd = shlex.split(cmdString)
result = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT).decode("utf-8")
# Check for error
if re.search("^Traceback", result) or re.search("[a-zA-z]*Error:", result):
raise ValueError(result)
return result
# end _runSubprocess
相關問題
- 1. qt GUI應用程序中的終端
- 2. Android從終端終止應用程序
- 3. 應用程序不顯示在終端
- 4. 佔用整個終端的終端應用程序
- 5. 使用整個終端窗口的終端應用程序
- 6. 在bash中顯示術語時終止終端應用程序
- 7. 獨立的python終端應用程序
- 8. 在QT應用程序中嵌入應用程序(本例中爲終端)
- 9. BB10 - Cascades應用程序 - 控制檯/終端應用程序
- 10. Perl多終端應用程序
- 11. 通過終端停止應用程序
- 12. 部署終端庫Java應用程序
- 13. Mac終端Chrome應用程序.localized
- 14. 從應用程序啓動終端
- 15. 如何在終端的ruby應用程序中做文本框?
- 16. 在java web應用程序的網頁中訪問linux終端
- 17. 在我的應用程序中放置一個'終端'?
- 18. 在應用程序的終端中運行命令
- 19. Mac/Cocoa:在我的應用程序中嵌入終端窗口
- 20. 如何在Ubuntu的終端中自動運行應用程序?
- 21. 如何在Ruby終端應用程序中使用cbreak模式?
- 22. 使用QProcess測試PySide應用程序
- 23. 如何在Java GUI應用程序中讀取終端流?
- 24. 我無法獲取QTCaptureSession在終端應用程序中捕獲
- 25. 在jsp應用程序中執行終端命令
- 26. 如何在Linux終端應用程序中檢測XOFF和XON
- 27. 在OSX應用程序中運行終端命令?
- 28. 如何在WPF應用程序中託管終端會話(mstsc)?
- 29. 在可可應用程序中通過終端講話
- 30. 如何在Android應用程序中運行終端命令?