М
МаркГленШілде 1, 2020, 3:43 Т.Қ.

Qt C++ и Python

nltk, Qt, Python, C++

Может быть Qt тут и ни при чём, тогда как это сделать в C++.
C++ учу. Python - ну слышал что такое есть, умею писать print("hello world").
Имеется огромное желание решить одну задачу.
Допустим, имеем библиотеку nltk в python и некую программу на C++.

nltk выдаёт такое:

nltk.pos_tag(nltk.word_tokenize("""I love you"""))
[('I', 'PRP'), ('love', 'VBP'), ('you', 'PRP')]

Как получить такой результат

С++ (Qt):

QString iLoveYouQtString("I love you.")
QMap<QString, QString> qtMap;

python:

qtMap = nltk.pos_tag(nltk.word_tokenize(iLoveYouQtString))
QMap<QString, QString>::const_iterator i = qtMap.constBegin();
while (i != qtMap.constEnd()) {
    cout << i.key() << ": " << i.value() << Qt::endl;
    ++i;
}

>> I: PRP
>> love: VBP
>> you: PRP

Короче говоря, как связать скрипт python и программу C++

upd. Ну я так думаю, что из Qt будет запускаться скрипт с подачей в него аргумента. Но можно ли при этом получить из этого скрипта возврат обратно в C++. И как это хоть выглядит, покажите направление, я подхвачу, наваяю что-нибудь и вы потом может быть подправите, если не получится.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

5
Evgenii Legotckoi
  • Шілде 2, 2020, 1:50 Т.Ж.

Если вы хотите использовать Qt и Python. То используйте PyQt5 (неофициальная библиотека привязок из Python к Qt) или PySide2 (официально поддерживаемая бибилотека привязок из Python к Qt).

А скрещивать ужа с ежом, чтобы получить 5 метров колючей проволоки не надо. То есть не пишите C++ программу, в которой будете вызывать Python код, который будет вызывать C++, который ... и тут мы окончательно запутываемся в этом бардаке.

Пишите на Python, используя библиотеки привязок к Qt: PyQt5 или PySide2

    М
    • Шілде 3, 2020, 6:43 Т.Ж.

    Мне казалось что это задача простая.

    Ну значит буду у вас с питоном скоро помощи просить.

      Evgenii Legotckoi
      • Шілде 3, 2020, 6:52 Т.Ж.
      • (өңделген)

      Это возможно. Но обычно это используется для добавления внутренней консоли в приложение и использования скриптов, чаще JavaScript скриптов (Qt имеет JavasScript Engine), чем Python.
      При этом для внутренней логики с внутренним интерпретатором без использования внешних пакетов.
      Чтобы делать то, что вы хотите, обычно обдумывают все подводные камни раз 100.

      Можно конечно запускать отдельный Python скрипт через QProcess. но как-то совсем некомильфо, как я думаю. Лучше уж полностью использовать Python, если не предполагается интерфейс прогаммы как у CAD систем.

      Собственно, можете действтительно попробовать использовать QProcess, возможно, это как раз то, что вам нужно будет.
      Возможно, я бы только результат выполнения куда-нибудь складывал, например в текстовый файл. А по окончанию выполнения скрипта считывал бы этот файл уже в Qt программе.

        М
        • Шілде 3, 2020, 6:56 Т.Ж.

        запускать отдельный Python скрипт через QProcess

        Да, как-то так представлял. Запустил, он отработал, а что дальше непонятно. Положил данные в какой-то файл или в БД, а C++ уже обращается туда? Ну если это некрасиво, то потренируюсь с Python немного.

          Evgenii Legotckoi
          • Шілде 3, 2020, 7 Т.Ж.

          Красиво/некрасиво - это скорее моё личное отношение. Если есть возможность ограничить количество интсрументов, то лучше ограничить. Но не зацикливайтесь на этом.

          Если у вас есть скрипты Python, которые что-то выполняют и складывают результат выполнения в файл, то можно их запускать через QProcess, дожидаться выполнения скрипта. QProcess как раз имеет сигнал finished. И по этому сигналу выполнять считывание данных из файла.

            Пікірлер

            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
            Кіріңіз немесе Тіркеліңіз
            Г

            C++ - Тест 001. Первая программа и типы данных

            • Нәтиже:66ұпай,
            • Бағалау ұпайлары-1
            t

            C++ - Тест 001. Первая программа и типы данных

            • Нәтиже:33ұпай,
            • Бағалау ұпайлары-10
            t

            Qt - Тест 001. Сигналы и слоты

            • Нәтиже:52ұпай,
            • Бағалау ұпайлары-4
            Соңғы пікірлер
            G
            GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
            Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
            d
            dblas5Шілде 5, 2024, 11:02 Т.Ж.
            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssrАқп. 8, 2024, 6:43 Т.Қ.
            Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            АК
            Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
            Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            Енді форумда талқылаңыз
            Evgenii Legotckoi
            Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            F
            FynjyШілде 22, 2024, 4:15 Т.Ж.
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
            BlinCT
            BlinCTМаусым 25, 2024, 1 Т.Ж.
            Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
            BlinCT
            BlinCTМамыр 5, 2024, 5:46 Т.Ж.
            Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
            Evgenii Legotckoi
            Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

            Бізді әлеуметтік желілерде бақылаңыз