Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как мне вызвать графический интерфейс .py из .cpp?

Автор вопроса: Daniel PantigosoОтветов: 1

Я использую Python 3.8.5 (64-разрядная версия) и Dev-C++ (генерация кода ISO C++11, включает папку включения Python, а в библиотеках также есть папка Python Lib).

Я разработал очень простой и простой графический интерфейс ttk на Python, и все, что мне нужно, это чтобы мой .cpp вызывал графический интерфейс и отправлял и получал данные из него.

До сих пор я заметил, что мне нужно #include <Python.h> и использовать Py_Initialize(); и Py_Finalize(); для чего-то. Я знаю, что могу вызвать .cpp из исходного файла графического интерфейса Python, но мой учитель хочет, чтобы это было наоборот.

Есть ли способ сделать это?

Изменить 1: например, если я запускаю следующий код:

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

using namespace std;

int main()
{
    Py_Initialize();
    cout << Py_GetVersion() << endl;
    PyRun_SimpleString("print('C++ back-end & Python front-end')");
    Py_Finalize();
    return 1;
}

Затем я получаю сообщение об ошибке: Python-C++.cpp:(.text+0x10): неопределенная ссылка на `__imp_Py_Initialize', GetVersion, SimpleStringFlags и Finalize.

Могу ли я сделать это в Visual Studio? Я рву на себе волосы.

Редактировать 2: я получил Embedded Python для работы в Visual Studio. Теперь, как мне импортировать свой Interface.Py с моим .cpp и как использовать его в качестве графического интерфейса?

  • Просто "вызов GUI и отправка и получение данных из него" может быть сложной задачей и может иметь довольно много значений. Подробнее о цели, пожалуйста? Davis Herring 09.08.2020
  • @DavisHerring Мое домашнее задание - смоделировать программу поступления в университет. Наш профессор сказал нам создать графический интерфейс на Python, а затем заставить С++ (мы можем использовать DevC++ или Visual Studio) вызвать графический интерфейс, поскольку в графическом интерфейсе есть поля ввода и кнопки, которые указывают, является ли пользователь студентом или администратором, хочет зарегистрироваться или сделать другие вещи и т. д. Мне нужно только вызвать Interface.py из .cpp и каким-то образом связать их. Daniel Pantigoso 09.08.2020
  • stackoverflow.com/questions/37238645 / Возможно, это поможет вам... 09.08.2020
  • @HokoLomal Это то, что я нашел, но это не то, чего хочет наш профессор. Она хочет просто скомпилировать и запустить .cpp/exe, и это справится со всем. Он открывает графический интерфейс tkinter (Interface.py), и единственное, что делает графический интерфейс, - это получает ввод/записи и отправляет их в .cpp. .cpp обрабатывает все внутренние вычисления. Daniel Pantigoso 09.08.2020

pythonc++user-interfaceembed

Ответы

Ответ 1 · Daniel Pantigoso

//Daniel Pantigoso e Isaac Brenes
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <errno.h>
#include <Python.h>

using namespace std;

int main()
{
    FILE* scr;
    Py_Initialize();

    scr = fopen("Interface.py", "r");
    PyRun_SimpleFile(scr, "r");

    Py_Finalize();
    return 1;
}

Вам придется немного повозиться с параметрами Visual Studio, но это выполнимо. Visual Studio должен соответствовать вашей установке Python (64-разрядный Python - x64 VS, 32-разрядный Python - x86). Свойства проекта должны иметь:

  • C/C++
  • Линкер

В C/C++ General: Дополнительные каталоги включения: нажмите кнопку справа -> ‹Edit...› -> кнопка папки -> кнопка ... -> перейдите к месту установки Python -> Python -> Python( ваша версия) -> include -> Select Folder -> Add -> Ok Preprocessor: Preprocessor Definitions: нажмите кнопку справа -> ‹Edit...› -> Copy paste this: _CRT_SECURE_NO_WARNINGS -> Ok

В Linker General: Additional Library Directorys (вам придется сделать это дважды, потому что вам нужно добавить две папки): нажмите кнопку справа -> ‹Edit...› -> кнопка папки -> кнопка ... -> перейдите туда, где установлен ваш Python -> Python -> Python (ваша версия) -> Lib & libs (вы должны добавить эти две, поэтому вам нужно сделать это дважды) -> Выбрать Папка -> Добавить -> ОК

Готово.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы