我无法弄清楚为什么这不起作用:
void Controller::on_buttonVisualTracking_clicked()
{
QProcess *trackingProcess = new QProcess();
trackingProcess->start("python C:\\visualTracking.py");
}
这里的具体脚本是一个pychart脚本,如果我只是从命令行运行它,它会正确执行,打开一个显示图表的窗口。这是我应该强调的一点,我希望打开一个显示 pychart 的新窗口,如果我自己运行脚本,这就是我得到的。
我还尝试了这段代码来查看 QProcess 是否根本不起作用。但是,这按预期工作,并出现了一个空的记事本窗口。
void Controller::on_buttonVisualTracking_clicked()
{
QProcess *trackingProcess = new QProcess();
trackingProcess->start("notepad");
}
所以我想我提供参数的方式可能有问题,所以我尝试了这个,它打开了一个记事本窗口,其中包含你所期望的 visualTracking.py 文本。
void Controller::on_buttonVisualTracking_clicked()
{
QProcess *trackingProcess = new QProcess();
trackingProcess->start("notepad C:\\visualTracking.py");
}
因此,我完全不知所措。QProcess为什么不会打开python脚本?
更新:根据建议,我现在尝试了这两种选择,但都没有奏效。
void Controller::on_buttonVisualTracking_clicked()
{
QString run = "C:\\Development\\Anaconda3\\python.exe";
QStringList args;
args << "C:\\visualTracking.py";
QProcess *trackingProcess = new QProcess();
trackingProcess->start(run, args);
}
和
void Controller::on_buttonVisualTracking_clicked()
{
QString commands = "python C:\\visualTracking.py";
QProcess *trackingProcess = new QProcess();
trackingProcess->start("cmd");
trackingProcess->write(commands.toLatin1().data());
if(!trackingProcess->waitForStarted()){};
}
更新:我以为我有一个解决方案,但不幸的是,我再次在开发机器上,无法再次运行 python 脚本。我不知道为什么行为会随机变化。我唯一的猜测是某些 Windows 安全设置阻止我的应用程序运行脚本,但我没有任何证据表明这一点