В настоящее время я использую pythonQt, я звоню evalFile
функция для вызова моего файла Python в ресурсах. Я хочу вызвать два отдельных файла Python (например, main_1.py и main_2.py) из моих пользовательских классов (worker1 и worker2). Но проблема заключается в том, что каждый мой класс работает в подпотоке. Как я могу это сделать? приведенный ниже пример кода дает мне ошибку в PythonQt::init();
worker1.h
#ifndef WORKER1_H
#define WORKER1_H
#include <QObject>
class worker1 : public QObject
{
Q_OBJECT
public:
explicit worker1(QObject *parent = 0);
public slots:
void onTimeout();
};
#endif // WORKER1_H
worker1.cpp
#include <QDebug>
#include <QThread>
#include "worker1.h"#include <PythonQt.h>
worker1::worker1(QObject *parent) : QObject(parent)
{
}
void worker1::onTimeout()
{
qDebug()<<" Worker::onTimeout get called from Worker_1?: "<< QThread::currentThreadId();
PythonQt::init();
PythonQtObjectPtr mainModule =
PythonQt::self()->getMainModule();
mainModule.evalFile(":/test/main_1.py");
}
работник2 похож на работник1.
main.cpp
#include <QApplication>
#include <QObject>
#include <PythonQt.h>
#include <QDebug>
#include <QThread>
#include <QTimer>
#include "worker1.h"#include "worker2.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<<"From main thread: "<<QThread::currentThreadId();
QThread t;
QThread t_2;
QTimer timer;
timer.setSingleShot(true);
worker1 worker;
worker2 worker_2;
QObject::connect(&timer, SIGNAL(timeout()), &worker, SLOT(onTimeout()));
QObject::connect(&timer, SIGNAL(timeout()), &worker_2, SLOT(onTimeout()));
timer.start(1000);
worker.moveToThread(&t);
worker_2.moveToThread(&t_2);
t.start();
t_2.start();
return a.exec();
}
main_1.py
def add_loop( l):
for i in range(l):
print ("1")
return 10000
print (add_loop(10000))
print ("Test_1")
ФИЛЬМЫ ПОХОЖИЕ НА main_1.py
Задача ещё не решена.
Других решений пока нет …