如何解决在PyQt应用程序中运行Windows可执行文件calc.exe等
我正在尝试使用PyQt5用Python编写的应用程序内部运行Windows可执行文件。我是使用PyQt5的新手,但是尝试一下。
我面临的问题实际上是让有问题的EXE在我的应用程序Frame,Window或QWidget中运行。
目前,我不需要向Windows可执行文件发送或从Windows可执行文件获取响应/结果,我只需要能够在我的应用程序中显示它。
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# create a process
exePath = "C:\\Windows\\system32\\calc.exe"
# subprocess.Popen(exePath)
os.system(exePath)
hwnd = win32gui.FindWindow(0,"Calculator")
print(hwnd)
time.sleep(0.05)
window = QtGui.QWindow.fromWinId(hwnd)
self.createWindowContainer(window,self)
self.setGeometry(500,500,450,400)
self.setWindowTitle('File dialog')
self.show()
def main():
app = QApplication(sys.argv)
w = MyWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
我从以下代码中得到的是这样:
解决方法
对不起,我不知道我是否正确理解了您,但我建议您尝试以下方法:
import sys
import subprocess
import threading
import time
import win32gui
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QWindow,QPixmap
from PyQt5.QtWidgets import (QWidget,QApplication,QVBoxLayout,QGridLayout,QMainWindow,QLabel)
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
self.widget = QWidget()
self.widget.setFixedSize(230,280)
self.widget.setStyleSheet("background-color: yellow;")
self.label = QLabel(self)
self.label.setPixmap(
QPixmap('images/splash_.jpg').scaled(self.size().width()/2,self.size().height())
)
self.grid_layout = QGridLayout(self.central_widget)
self.grid_layout.addWidget(self.widget,2,1)
self.v_layout = QVBoxLayout(self.widget)
self.initUI()
self.grid_layout.addWidget(self.label,1,1)
def initUI(self):
t = threading.Thread(target=self.runExe)
t.start()
# Calculator
hwnd1 = win32gui.FindWindowEx(0,"CalcFrame","Калькулятор")
start = time.time()
while hwnd1 == 0:
time.sleep(0.01)
# Calculator
hwnd1 = win32gui.FindWindowEx(0,"Калькулятор")
end = time.time()
if end - start > 5:
return
window = QWindow.fromWinId(hwnd1)
widget = self.createWindowContainer(window,self.central_widget)
self.v_layout.addWidget(widget)
@staticmethod
def runExe():
exePath = "C:/Windows/system32/calc.exe"
subprocess.Popen(exePath)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.resize(550,400)
ex.show()
sys.exit(app.exec_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。