QProcess убивается перед запуском скрипта Python - PullRequest
0 голосов
/ 16 января 2019

для школьного проекта я сделал игру в понг с 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...