重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
因为process.start()函数实质是采用命令行中"start XXX"的方式启动XXX。这里的XXX仅仅适用于大部分的exe可执行文件以及一些常用文件。对于py或者pyw文件都不行。
10余年的宜春网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整宜春建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“宜春网站设计”,“宜春网站推广”以来,每个客户项目都认真落实执行。
有两种解决方案:
另外编写一个bat用来启动py文件,就可以使用start启动这个bat就可以了;
使用另一个函数“QDesktopServices::openUrl”来启动py文件。具体使用方法请自行百度。不做过多说明。
我们首先来看看QtCreator能不能编辑运行python脚本。
可以看到新建项目的选项里并没有python相关的选项,看了并不能用QtCreator来管理python项目。
我们来看看另一个方面,看看QtCreator能不能创建编辑python的相关文件吧。
可以看到,有python的相关选项,点击左侧的Python标签,在中间部分可以看到有Python class和Python file两个选项。
这里我们选择Python file,然后点击choose按钮。然后在名称一栏输入qtpythondemo,然后点击下一步。再点击完成,就进入到编辑界面了。我们来看看情况。
可以看到确实可以编辑python脚本文件。
我们来看看能否运行该脚本,在脚本里输入:
print("hello world")
可是我们发现调试菜单,以及界面左下角的运行等按钮都是灰色的,显然用不了。
如果,QtCreator只能进行编辑的话,还不如直接使用IDLE来的方便,或者任何一个功能稍强大的文本编辑器更好,这样岂不是很鸡肋。
下面,我们给QtCreator添加上执行python脚本的功能。
点击,工具菜单,选项打开选项窗口。
点击界面左侧的 环境,右侧选择 外部工具 标签,再点击下面的 添加 按钮,先选择 添加目录 ,然后将新类别修改为RunPy,这个你可以自己取。
点击选中RunPy,然后再点击 添加 按钮,选择 添加工具。这时右侧的灰色区域就处于可编辑状态了。当然新工具也要命名,就用Python3吧。
下面,我们需要对右侧的内容进行编辑设置。具体如下:
1、说明:可以是任何你喜欢的内容,这里我们输入“运行编辑的Python3脚本”
2、执行档:就是python的可执行文件路径,我的是C:\Python34\python.exe
3、参数:输入 %{CurrentDocument:FilePath}
4、工作目录:%{CurrentDocument:Path}
5、Environment:QT_LOGGING_TO_CONSOLE=1
其他的默认即可。上面带有%的是QtCreator的内置环境变量而已,当我们选中某个文本框时,可以看到文本框右侧有个ABC字母的按钮,点开后可以看到很多环境变量列表。
最后,点击Apply和OK即可。
我们来看看配置完成后的情况。
好了,配置完成后,我们来看看怎么运行。
可是调试菜单和左下角的按钮还是灰色呀,没关系。我们刚才是在外部工具的标签页里添加的设置,那就去外部工具找找吧。
我们看到了 外部-RunPy-Python3 正是我们刚刚设置的。
点击Python3看看有什么会发生。
我们看到,界面下方弹出了 概要信息 窗口,里面正是上面 python 脚本的输出。YES!我们成功了!
#include Python.h
int main()
{
Py_Initialize(); // 初始化
// 将Python工作路径切换到待调用模块所在目录,一定要保证路径名的正确性
string chdir_cmd = string("sys.path.append(\'/xxxxxxx/')");
// 加载模块
PyObject* moduleName = PyString_FromString("xx"); //模块名,不是文件名
PyObject* pModule = PyImport_Import(moduleName);
// 加载函数
PyObject* pv = PyObject_GetAttrString(pModule, "xxx");
// 调用函数
PyObject* pRet = PyObject_CallObject(pv, xxx);
Py_Finalize();
}
再qt里面包含头文件 , 初始化,引入py文件路劲,导入模块然后就可以执行里面的函数了,如果你想直接执行文件而不需要得到里面的结果直接调用:system("python xxx.py");就好了