для школьного проекта я сделал игру в понг с Pygame. Это все отлично работает. Сейчас я создаю пользовательский интерфейс с помощью создателя Qt, чтобы запустить мою игру в графическом интерфейсе.
с помощью Qt, вызывающего внешние сценарии Python и Процесс Qt автоматически убивается и другими потоками, которые я пробовал для себя, но, похоже, ничего не получилось из-за моей ошибки
"QProcess: уничтожено, пока процесс (" python ") еще работает."
это скрипт, который я пытаюсь запустить:
def test():
for x in range(100):
print(x)
print("python code !!!!")
test()
это мой код для нажатия кнопки:
void SettingsWindow::on_pushButton_2_clicked()
{
QProcess process;
QString scriptFile = QCoreApplication::applicationDirPath() + "/Users/wouterlefebvre/GithubRepos/Hello.py";
QString pythonCommand = "python " + scriptFile;
process.start (pythonCommand);
QProcess *myProcess = new QProcess();
myProcess->startDetached("python.exe "/Users/wouterlefebvre/GithubRepos/Hello.py" );
myProcess->start();
//check that the process actually starts
if (!myProcess->waitForStarted()) {
qDebug("Could not start process");
return;
}
QTime time;
time.start();
//wait 4 seconds
while (time.elapsed() < 4000) {
//keep the GUI working
QApplication::processEvents();
}
myProcess->kill();
// wait for the process to actually stop
myProcess->waitForFinished();
delete myProcess;
}
Насколько я понимаю, Qprocess остановился после вызова скрипта python. но я понятия не имею, как это исправить.
Помощь будет очень признательна.
РЕДАКТИРОВАТЬ: с этим примером кода я сделал свою работу. Но теперь у меня есть ошибка модуля импорта для pygame в QT. есть идеи почему?
void SettingsWindow::on_pushButton_2_clicked()
{
QProcess p;
QStringList params;
QString pythonPath = "/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6";
QString pythonScript = "/Users/wouterlefebvre/GithubRepos/Hello.py";
params << pythonScript;
p.start(pythonPath, params);
p.waitForFinished(-1);
QString p_stdout = p.readAll();
QString p_stderr = p.readAllStandardError();
if(!p_stderr.isEmpty())
qDebug()<<"Python error:"<<p_stderr;
qDebug()<<"Python result="<<p_stdout;
}