cmake构建python调用C++

了解到python写界面很方便也美观,想搞个小场景,实现用python写界面调用C++程序的流程。

小场景:计算加法

1、Python 程序show.py :创建了一个 GUI 界面,让用户输入两个数字,点击"相加"按钮时,调用C++程序

2、C++ 程序addsum.cpp :接收参数,将两个参数转换为整数并相加,输出结果

3、CMakeLists.txt :构建 C++ 程序sum_res

show.py

import tkinter as tk
from tkinter import filedialog, ttk
import subprocess

class ShowAddApp:
    def __init__(self, root):
        self.root = root
        self.root.title("求加法")
        self.root.geometry("550x200")

        ttk.Label(text="num a").pack(side=tk.LEFT, padx=5)
        self.add_enter_a = tk.StringVar()
        add_a = ttk.Entry(textvariable=self.add_enter_a,width=5)
        add_a.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)

        ttk.Label(text="num b").pack(side=tk.LEFT, padx=5)
        self.add_enter_b = tk.StringVar()
        add_b = ttk.Entry(textvariable=self.add_enter_b,width=5)
        add_b.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)

        self.browse_btn = ttk.Button(text="相加", command=self.get_add_res)
        self.browse_btn.pack(side=tk.LEFT, padx=5)

        ttk.Label(text="相加结果").pack(side=tk.LEFT, padx=5)

    def get_add_res(self):
        numA = self.add_enter_a.get()
        numB = self.add_enter_b.get()
        if not numA or not numB:
            tk.messagebox.showwarning("警告", "请输入A和B")
            return

        try:
            result = subprocess.run(
                ["./sum_res", numA, numB],
                capture_output=True,
                text=True,
                check=True
            )
            res_num = result.stdout
            ttk.Label(text=res_num).pack(side=tk.LEFT, padx=5)
        except subprocess.CalledProcessError as e:
            tk.messagebox.showerror("错误1",f"C++程序执行失败: {e.stderr}")
        except Exception as e:
            tk.messagebox.showerror("错误2",f"发生未知错误:{str(e)}")

if __name__ == "__main__":
    root = tk.Tk()
    app = ShowAddApp(root)
    root.mainloop()

 

addsum.cpp

#include <iostream>
using namespace std;
int main(int argc, char* argv[]){
    if(argc!= 3){
        cerr<<"Usage argc: "<< argc <<endl;return 1;
    }
    int c = stoi(argv[1]) + stoi(argv[2]);
    std::string numStr = std::to_string(c);
    cout << numStr << endl;
    return 0;
}

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(AddSum)

set(CMAKE_CXX_STANDARD 11)

add_executable(sum_res addsum.cpp)

构建程序执行的命令

cmake -S . -B build

cd build && make  

复制生成文件sum_res到源文件目录

python3 show.py 

posted @ 2025-12-09 12:33  yangly  阅读(2)  评论(0)    收藏  举报