Qt Creator 与Python混合编程配置

2023-05-16

第一步 创建Qt工程

第二步 在项目.pro文件下添加python解释器安装路径

添加代码如下,大家可复制后更改python版本以及安装路径

INCLUDEPATH += C:\Python\include
LIBS += -LC:\Python\libs -lpython311

第三步 给项目添加Python文件

第四步 编写python代码验证安装【简单案例】

在创建的python文件里边写入下面代码:

def add(a, b):
    return a, b

在.h文件里边加入下面代码:【可以自己创建,我用的是创建项目生成的.h文件】

#include <Python.h>
#include <iostream>
#include <QDebug>

在.h文件对应的.cpp文件里边的函数内加入以下代码:【析构函数不变】

    //Python初始化
    Py_Initialize();
    if( !Py_IsInitialized() )
        qDebug()<<"初始化失败";

    //导入sys模块设置模块地址
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");

    //创建模块指针
    PyObject* pModule = PyImport_ImportModule("Py_Module");
    if (!pModule)
        qDebug()<<"获取模块指针1失败";

    //创建函数指针
    PyObject* pFunc= PyObject_GetAttrString(pModule,"add");
    if(!pFunc)
        qDebug()<<"获取函数指针2失败";

    //创建函数参数,方法1
    PyObject* pPara = PyTuple_New(2);        // 2个参数
    PyTuple_SetItem(pPara, 0, Py_BuildValue("i",1));  //参数1为int型 1
    PyTuple_SetItem(pPara, 1, Py_BuildValue("i",2));  //参数2为int型 2
    //pPara = Py_BuildValue("(i,i)",1,2); //连写方式

    //创建函数参数,方法2
    PyObject* args = PyTuple_New(2);        // 2个参数
    PyObject* arg1 = PyLong_FromLong(4);    // 参数一设为4
    PyObject* arg2 = PyLong_FromLong(3);    // 参数二设为3
    PyTuple_SetItem(args, 0, arg1);
    PyTuple_SetItem(args, 1, arg2);

    //调用Python函数,传入元组参数pPara
    PyObject *FuncBack = PyObject_CallObject(pFunc,pPara);
    //PyObject_CallObject(pFunc,nullptr); //无参数调用

    //FuncBack是返回值指针,转换获取返回值
    int res = 0;
    PyArg_Parse(FuncBack,"i",&res);
    qDebug()<<"返回值: "<<res;

    //调用结束,销毁
    Py_Finalize();

点击运行

特别注意

一、导入python.h文件报错

解决方法

object.h文件报错一般是因为宏定义冲突的问题,我们在文件报错所在地方加上一行代码取消宏定义就可以了

#undef slots  //取消宏定义

二、运行后提示找不到.py文件路径或导入.py文件报错

解决方法

将项目下的.py文件复制到项目debug文件夹下

我的.py文件位置:C:\App\Qt\Qt_project\qt_python1

我的项目debug文件夹位置:C:\App\Qt\Qt_project\build-qt_python1-Desktop_Qt_5_14_2_MinGW_64_bit-Debug\debug

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt Creator 与Python混合编程配置 的相关文章

  • 从一个数组中删除另一个数组中的元素

    假设我有这些二维数组A and B 我怎样才能从中删除元素A那些在B 集合论中的补集 A B A np asarray 1 1 1 1 1 2 1 1 3 1 1 4 B np asarray 0 0 0 1 0 2 1 0 3 1 0 4
  • 在 sympy 绘图中,如何获得具有固定纵横比的绘图?

    如果我用这个片段画一个圆 from sympy import x y symbols x y p1 plot implicit Eq x 2 y 2 1 aspect ratio 1 1 我会得到一个像这样的图形窗口 现在长宽比不是我所期望
  • Python 如果 kwargs 中的 key 并且 key 为 true

    if force in kwargs and kwargs force is True 感觉应该有更好的方法来编写这个条件 因为我重复了键和变量 假设您确实想检查返回的关键字参数是否is True 这是另一种稍微不同的方式 if kwarg
  • Django 和 AWS 简单电子邮件服务 [重复]

    这个问题在这里已经有答案了 我正在尝试启动并运行 django 站点 并且正在尝试启用 django 的标准密码重置服务 我的网站由 AWS EC2 托管 因此我想将 AWS SES 用于我的电子邮件服务 但是 我无法使 smtp 连接正常
  • Python绕相机轴旋转图像

    假设我有一个图像 是在对某些原始图像应用单应性变换 H 后获得的 未显示原始图像 将单应性 H 应用于原始图像的结果是该图像 我想围绕合适的轴 可能是相机所在的位置 如果有的话 将此图像旋转 30 度以获得此图像 如果我不知道相机参数 如何
  • 如何逐行替换(更新)文件中的文本

    我试图通过读取每一行 测试它 然后写入是否需要更新来替换文本文件中的文本 我不想保存为新文件 因为我的脚本已经先备份文件并对备份进行操作 这是我到目前为止所拥有的 我从 os walk 获取路径 并且保证 pathmatch var 正确返
  • Python中非常大的整数的math.pow是错误的[重复]

    这个问题在这里已经有答案了 我试图通过计算一个整数的非常大的幂来打印一个非常大的数字 尽管我的代码是正确的 但我没有观察到所需的输出 一般来说 Python解释器可以打印系统内存支持的非常大的整数 考虑到这个假设 下面是我正在运行的代码 a
  • PRAW 出现 SSLError?

    我正在尝试开始使用 PRAW 但在使用 login 时遇到问题 我有以下代码 import praw r praw Reddit This is a test bot r login myRedditUsername password 我收
  • 如何在Python中重命名virtualenv?

    我拼错了名字virtualenv使用以下方法初始化它 virtualenv vnev 我实际上打算创建一个名为的环境venv 尝试重命名后vnev文件夹到venv 我发现这并没有提供太多帮助 激活环境的名称仍然重命名旧的vnev mv vn
  • Django 单元测试数据库没有被拆除?

    我编写了一些单元测试来测试我的 Django 应用程序 特别是一个测试套件中包含大量代码setUp 功能 所述代码的目的是为数据库创建测试数据 是的 我了解固定装置 并且选择在这种情况下不使用它们 当我运行单元测试套件时 运行的第一个测试通
  • 为什么Python 3中实例方法可以作为类方法调用?

    考虑下面的类 class Foo object def bar self print self 在Python 2中 2 7 13 调用bar 作为类方法引发异常 gt gt gt Foo bar hello Traceback most
  • 即使使用标头和 Session 对象,Python requests.get 也会失败并出现 403 禁止

    我正在发出 GET 请求来获取 JSON 它在任何设备上的任何浏览器中都可以正常工作 但不能通过 python 请求 url https angel co autocomplete new tags params query sci tag
  • 使用字体模块的 Tkinter 代码无法从命令行运行?

    我有使用 tkinter 的代码 我可以从 IDLE 运行得很好 但会引发异常AttributeError module object has no attribute font 当它从命令行运行时 其他 tkinter 程序工作正常 但任
  • 从 Cython 代码生成 SIMD 指令

    我需要概述在高性能数字代码中使用 Cython 可以获得的性能 我感兴趣的事情之一是找出优化的 C 编译器是否可以对 Cython 生成的代码进行矢量化 所以我决定写下面的小例子 import numpy as np cimport num
  • “gi.repository.Gtk”对象没有属性“gdk”

    我正在尝试使用 GTK 创建多线程 需要 Gtk gdk 但我收到有关没有 gdk 属性的错误 我正在使用带有 Raspbian 的 Raspberry Pi 这就是我导入 GTK 库的方式 try import pygtk pygtk r
  • 如何在Python中仅列出顶级目录?

    我希望能够仅列出某个文件夹内的目录 这意味着我不需要列出文件名 也不需要其他子文件夹 让我们看看一个例子是否有帮助 在当前目录中我们有 gt gt gt os listdir os getcwd cx Oracle doc DLLs Doc
  • Python,质数检查器[重复]

    这个问题在这里已经有答案了 你好 我正在创建一个函数来检查一个数字是否是素数 但它告诉我 9 是一个素数 def eprimo num if num lt 2 return False if num 2 return True else f
  • 添加条件计数器:基于其他列的值的计数器列

    我有一张这样的桌子 id id2 val a red apple a red orange b blue fish c violet beef a yellow banana a black pork 我想根据 id 和 id2 的值创建一
  • Django 表单中的只读字段

    如何在 Django 表单中将字段设置为只读 我知道如何禁用某个字段 但这不是我想要的 任何帮助 将不胜感激 您可以使用可选的attrs定义时的参数Field 以机智 somefield forms CharField widget for
  • Django Python - LDAP 身份验证

    我目前正在研究 Django Python 我的目标是从 Ldap 目录对用户进行身份验证 我确实有 python 代码来访问 ldap 目录并检索信息 Code import ldap try l ldap open ldap forum

随机推荐

  • 十进制纯小数M转化成B进制数小数

    通过使用循环队列的方式将十进制纯小数M转化成B进制数 xff1b include lt stdio h gt include lt stdlib h gt malloc需要的头文件 xff1b define size 100 typedef
  • 十进制整数N转化成B进制整数

    通过使用顺序栈的方式将十进制整数N转化成B进制整数 xff1b include lt stdio h gt include lt stdlib h gt define size 100 typedef struct int data siz
  • redhat8安装ansible,Redhat8版本太低

    ansible因为更新的原因要安装Python3 9 Redhat8自带Python版本太低 耗费了一个多星期才解决 关闭防火墙和selinux 1 systemctl status firewalld 2 systemctl stop f
  • 从键盘输入10个整数,编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组

    include lt stdio h gt void main int t 10 temp i max min max 61 0 min 61 0 for i 61 0 i lt 10 i 43 43 scanf 34 d 34 amp t
  • 枚举类型详解

    对于枚举类型 xff0c 想必不少的读者 xff0c 也是听过 xff0c 但是 xff0c 却没怎么见过如何使用 xff01 xff01 所以 xff0c 笔者打算用这一篇博客 xff0c 来详细的讲解一下 xff0c 枚举 xff01
  • 常用的几种布局方式---Flex 布局(垂直居中展示)

    常用的几种布局方式 Flex 布局 垂直居中展示 xff09 前言一 默认使用静态布局二 flex布局 1 父元素container1 1 display flex1 2 flex direction属性1 3 主轴与侧轴1 4 justi
  • Java中List排序的3种方法

    在某些特殊的场景下 xff0c 我们需要在 Java 程序中对 List 集合进行排序操作 比如从第三方接口中获取所有用户的列表 xff0c 但列表默认是以用户编号从小到大进行排序的 xff0c 而我们的系统需要按照用户的年龄从大到小进行排
  • 解密微信sqlite数据库

    最近在研究解密微信APP的数据库 xff0c 1 通过Android手机内置备份功能 xff0c 可以获取到微信的数据库文件 xff0c 再通过adb传到电脑上 2 获取微信EnMicroMsg db库的密码 xff08 通过IMEI和ui
  • conda 使用教程

    conda 使用教程 针对 ubuntu 20 04 ubuntu 20 04 是 西柚云 主要使用的操作系统 西柚云官网 文章目录 conda 使用教程虚拟环境管理channels 管理包管理配置管理 参考教程 xff1a conda 的
  • Shell脚本接收位置参数,变量的定义、分类和查看

    本文基于Linux上RedHat 8版本进行配置演示 一 从用户输入获取参数 1 通过 符号配合 数字等来获取 2 通过read xff08 p xff09 来获取 二 Shell中的变量 1 定义变量和查看变量 2 变量的分类和取消 一
  • docker Compose 下载安装

    在linux上 请注意 xff0c Compose standalone 使用 compose语法而不是当前的标准语法compose 例如docker compose up xff0c 在使用 Compose standalone 时键入
  • C++快读CF模板

    pragma GCC optimize 1 pragma GCC optimize 2 pragma GCC optimize 3 34 Ofast 34 34 inline 34 include lt bits stdc 43 43 h
  • 一个简单的学生信息管理系统的Python代码,使用Tkinter GUI库和MySQL数据库。

    以下是一个简单的学生信息管理系统的Python代码 xff0c 使用Tkinter GUI库和MySQL数据库 这个系统允许您添加 xff0c 更新 xff0c 删除和查看学生信息 在开始之前 xff0c 请确保你已安装必要的库 xff0c
  • 存储型XSS简介

    文章目录 一 存储型XSS简介 xff08 一 xff09 存储型XSS的概念 xff08 二 xff09 存储型XSS攻击过程 xff08 三 xff09 打XSS的潜在风险 二 XSS平台使用方法三 靶场实战 一 存储型XSS简介 xf
  • LINUX系统中MySQL8.0修改密码步骤

    1 程序报错 Your password does not satisfy the current policy requirements 译 xff1a 您的密码不符合当前策略要求 You must reset your password
  • 微软 Win快捷键大全

    1 Win 43 A 打开快速设置面板 快速设置面板是 Win11 新增加的一个模块 xff0c 可以完成一些常用功能 xff08 如 WIFI 飞行模式 投影 夜间模式 亮度 音量等 xff09 的快速启闭 Win 43 A 是这项功能的
  • Python学习——面向对象_类属性和类方法

    根据B站 黑马程序员 的python教程记录笔记 在前面的学习中 xff0c 我们已经知道 xff1a 使用面向对象开发 xff0c 第一步是设计类 使用 类名 创建对象 xff0c 而这个动作分为几步 xff1a 1 在内存中为对象分配空
  • java判断字符串数据是否为日期格式 yyyy-MM-dd

    判断字符串是否为合法的日期格式 64 param dateStr 待判断的字符串 64 return public static boolean isValidDate String dateStr 判断结果 默认为true boolean
  • MicroPython 编写 Python 模块规范

    mark 转载于 https www cnblogs com juwan p 11447826 html
  • Qt Creator 与Python混合编程配置

    第一步 创建Qt工程 第二步 在项目 pro文件下添加python解释器安装路径 添加代码如下 xff0c 大家可复制后更改python版本以及安装路径 INCLUDEPATH 43 61 C Python include LIBS 43