Qt的调用外部 - Python脚本(Qt Calling External Python Scr

2019-07-20 16:32发布

我试图写一个GUI的包装为Python编写的我的命令行工具之一。
有人建议,我认为我应该使用Qt。

下面是我的项目的.cpp文件:

#include "v_1.h"
#include "ui_v_1.h"
#include<QtCore/QFile>
#include<QtCore/QTextStream>
#include <QProcess>
#include <QPushButton>
v_1::v_1(QWidget *parent) :
    QMainWindow(parent),ui(new Ui::v_1)
    {
        ui->setupUi(this);
    }
    v_1::~v_1()
    {
        delete ui;
    }

void v_1::on_pushButton_clicked()
{
    QProcess p;
    p.start("python script -arg1 arg1");
    p.waitForFinished(-1);
    QString p_stdout = p.readAllStandardOutput();
    ui->lineEdit->setText(p_stdout);
}

下面是我的项目的头文件:

#ifndef V_1_H
#define V_1_H
#include <QMainWindow>
namespace Ui {
class v_1;
}

class v_1 : public QMainWindow
{
    Q_OBJECT   
public:
    explicit v_1(QWidget *parent = 0);
    ~v_1();

private slots:
    void on_pushButton_clicked();
private:
    Ui::v_1 *ui;
};

#endif // V_1_H

该UI文件只是一个按钮和一个LineEdit部件。

我分配的按钮插槽被点击时。 该on_pushButton_clicked()方法工作正常,当我打电话了一些实用工具,比如lsps ,这些命令是管道输出到LineEdit小部件,但是当我尝试调用一个Python脚本,它不显示我的LineEdit部件东西。

任何帮助将不胜感激。

Answer 1:

你有没有试过如下:

  1. 确保蟒蛇是在你的系统路径
  2. 传递参数的文档作为QStringList中陈述中
  3. 更改readAllStandardOutput到readAll同时测试

void v_1::on_pushButton_clicked() 
{
    QProcess p;
    QStringList params;

    params << "script.py -arg1 arg1";
    p.start("python", params);
    p.waitForFinished(-1);
    QString p_stdout = p.readAll();
    ui->lineEdit->setText(p_stdout);
}


Answer 2:

对我来说,下面的代码工作:

void MainWindow::on_pushButton_clicked()
{
    QString path = QCoreApplication::applicationDirPath();
    QString  command("python");
    QStringList params = QStringList() << "script.py";

    QProcess *process = new QProcess();
    process->startDetached(command, params, path, &processID);
    process->waitForFinished();
    process->close();
}

路径 :您可以设置自己的路
命令 :在程序要运行(在这种情况下蟒蛇)
PARAMS:要执行你想要的脚本
&ProcessID是杀过程中,如果是关闭的主窗口



Answer 3:

Hunor的回答为我工作了。 但我没有使用进程ID。 我所做的:

void MainWindow::on_pushButton_clicked()
{
   QString path = '/Somepath/mypath';
   QString  command("python");
   QStringList params = QStringList() << "script.py";

   QProcess *process = new QProcess();
   process->startDetached(command, params, path);
   process->waitForFinished();
   process->close();
}


文章来源: Qt Calling External Python Script