如何将cmd嵌入到pyqt5应用程序中?

0 人关注

我尝试了下面的代码,但似乎没有正常工作。不管我做了什么,我都不能使用嵌入式cmd。它看起来像装饰品。我的意思是我只想像普通的那样使用cmd。在这里,我粘贴了代码,如果有任何建议,我将非常感激。 我在Python 3.7.3 conda环境下开发这个应用程序,Window10。

import sys
import subprocess
import time
import win32gui
from PyQt5.QtCore import QProcess, Qt
from PyQt5.QtGui import QWindow, QIcon, QFont
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QMdiArea, QSplitter, QTextBrowser
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout
from win32com import client
from win32gui import GetWindowText, EnumWindows,SetForegroundWindow
class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.p = QProcess()
        self.layout = QVBoxLayout()
        self.mdi = QMdiArea()
        self.mainSplitter = QSplitter(Qt.Vertical)
        self.setCentralWidget(self.mainSplitter)
        self.mainSplitter.addWidget(QTextBrowser())
        self.initUI()
    def initUI(self):
        self.runExe()
        EnumWindows(self.set_cmd_to_foreground, None)
        hwnd1 = win32gui.GetForegroundWindow()
        #hwnd1 = win32gui.FindWindow(None, "C:\\Windows\\system32\\calc.exe")
        print(hwnd1)
        window = QWindow.fromWinId(hwnd1)
        container_widge = self.createWindowContainer(window, self)
        container_widge.setFocusPolicy(Qt.TabFocus)
        container_widge.setFocus()
        container_widge.setWindowTitle("ain")
        container_widge.setFont(QFont("Times New Roman"))
        container_widge.setGeometry(500, 500, 450, 400)
        #container_widge.setFocusPolicy()
        container_widge.activateWindow()
        container_widge.acceptDrops()
        container_widge.grabMouse()
        container_widge.setMouseTracking(True)
        self.mainSplitter.addWidget(container_widge)
        self.showMaximized()
        #self.setGeometry(200, 200, 700, 700)
        #self.show()
    def runExe(self):
        shell.run("cmd.exe")
        time.sleep(1)
    def set_cmd_to_foreground(self, hwnd, extra):
        """sets first command prompt to forgeround"""
        if "cmd.exe" in GetWindowText(hwnd):
            print(hwnd)
            SetForegroundWindow(hwnd)
            return
    def run_script(self, shell, scripts):
        """runs the py script"""
        shell.SendKeys(scripts+"{ENTER}")
if __name__ == '__main__':
    shell = client.Dispatch("WScript.Shell")
    app = QApplication(sys.argv)