С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
184 / 72 / 35
Регистрация: 09.05.2022
Сообщений: 387

Как объединить UI из electronJS с вычислением из python?

11.10.2023, 15:34. Показов 697. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма с кнопками и полями ввода на electron JS, и есть файл t.py, принимающий целые числа и рисующий график на matplotlib. Мне надо, чтобы пользователь вводил данные в поля ввода на UI из electron JS, вычисления и рисование графика делались на питоне, и график выводился пользователю на том же electron JS. Это физически возможно? Если да, то как это сделать, нужен максимально простой пример, чтобы точно знать, что это работает.

Добавлено через 1 час 39 минут
когда пробую просто запустить питон файл из командной строки, то ругается на отсутствие библиотеки matplotlib
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2023, 15:34
Ответы с готовыми решениями:

Как написать процедуру с вычислением вектора невязки и вычислением обратной матрицы
не пойму как сделать процедуру с вычислением вектора невязки и вычислением обратной матрицы((собственно матрицу программа считает на...

Проблемы с electronjs
Изучаю electron.js и меня интересует вот что: 1. В документации есть раздел структура API и там описаны объекты. Там есть объект,...

Electronjs уроки
есть ли какие-нибудь ресурсы для изучения electronjs, кроме документации. А то там не особо структурировано и как начать и продолжить...

6
Эксперт .NET
 Аватар для Usaga
14122 / 9340 / 1350
Регистрация: 21.01.2016
Сообщений: 35,087
11.10.2023, 17:07
karlhildekruger, ну... Много чего возможно. Как минимум вызывать приложение на питоне из приложения на электроне.

А почему нельзя всё сделать целиком или на электроне или питоне?
0
184 / 72 / 35
Регистрация: 09.05.2022
Сообщений: 387
11.10.2023, 17:22  [ТС]
сама идея в том, чтобы с разными вычислительными ядрами работать через общий интерфейс. Для начала пытаюсь хотя бы отобразить график, введя данные через поля ввода на electron JS. Matplotlib настроил, теперь работает, запуск с cmd питона тоже работает. Но отправка с electron JS тупо ничего не делает.
0
357 / 321 / 83
Регистрация: 17.04.2022
Сообщений: 1,050
Записей в блоге: 8
11.10.2023, 17:38
karlhildekruger,
а вы не пробовали посмотреть в сторону проекта Jupyter (Jupyter notebook, Jupyter Lab)?

Это Python с локальным веб-интерфейсом (electron JS - это тоже локальный веб-интерфейс, только на базе nodeJS).
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
11.10.2023, 17:50
Вы через child_process.exec передаёте данные питоновскому скрипту?
0
184 / 72 / 35
Регистрация: 09.05.2022
Сообщений: 387
11.10.2023, 19:17  [ТС]
main.js:
javascript

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    
 
const { app, BrowserWindow } = require('electron');
const path = require('path');
const url = require('url');
 
let mainWindow;
 
function createWindow() {
  mainWindow = new BrowserWindow({ width: 800, height: 600 });
  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  }));
}
 
app.whenReady().then(createWindow);
 
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit();
});
 
app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) createWindow();
});

script.js:
javascript

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 
const { exec } = require('child_process');
 
function generateGraph() {
  const n_ext = parseFloat(document.getElementById('n_ext').value);
  const layers = parseInt(document.getElementById('layers').value);
 
  const pythonScriptPath = 'C:\\Users\\apce1\\Desktop\\RAZRABOTKAPO\\my-electron-app\\t.py';
  const command = `python ${pythonScriptPath} ${n_ext} ${layers}`;
 
  exec(command, (error, stdout, stderr) => {
    if (error) {
      console.error(`Ошибка выполнения Python-скрипта: ${error.message}`);
      return;
    }
 
    if (stderr) {
      console.error(`Ошибка выполнения Python-скрипта: ${stderr}`);
      return;
    }
 
    console.log('Результат выполнения Python-скрипта:', stdout);
  });
}


t.py:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import numpy as np
import matplotlib.pyplot as plt
import sys
 
n_ext = float(sys.argv[1])
layers = int(sys.argv[2])
 
blocks = 8
 
layers_parameters = [[1.46, 120 * 10 ** -9],
                     [2.2 + 0.0001j, 80 * 10 ** -9]]
 
wl_start = 400
wl_stop = 1400
 
def layer_matrix(n_layer, d_layer, wl):
    m = np.zeros((2, 2), 'complex')
    m[0, 0] = np.cos(2 * np.pi * n_layer / wl * d_layer)
    m[0, 1] = (np.sin(2 * np.pi * n_layer / wl * d_layer) / n_layer) * 1j
    m[1, 0] = (np.sin(2 * np.pi * n_layer / wl * d_layer) * n_layer) * 1j
    m[1, 1] = np.cos(2 * np.pi * n_layer / wl * d_layer)
    return m
 
def block_matrix(wl):
    m = layer_matrix(layers_parameters[layers - 1][0], layers_parameters[layers - 1][1], wl)
    for k in reversed(range(layers - 1)):
        m = np.dot(m, layer_matrix(layers_parameters[k][0], layers_parameters[k][1], wl))
    return m
 
def S(wavelen):
    m = np.linalg.matrix_power(block_matrix(wavelen), blocks)
    return m
 
def R(l):
    return abs((S(l)[0][1] * n_ext ** 2 + (S(l)[0][0] - S(l)[1][1]) * n_ext - S(l)[1][0]) / (
            S(l)[0][1] * n_ext ** 2 - (S(l)[0][0] + S(l)[1][1]) * n_ext + S(l)[1][0])) ** 2
 
def T(l):
    return abs((2 * n_ext) / (S(l)[0][1] * n_ext ** 2 - (S(l)[0][0] + S(l)[1][1]) * n_ext + S(l)[1][0])) ** 2
 
wl_data = np.linspace(wl_start, wl_stop, 1001)
 
T_data = list(map(T, wl_data*1e-9))
R_data = list(map(R, wl_data*1e-9))
 
plt.figure()
plt.plot(wl_data, T_data, color='purple')
plt.title('Спектр пропускания слоистой структуры')
plt.xlabel('Длина волны, нм')
plt.ylabel('Коэффициент пропускания')
plt.grid()
plt.show()
index.html:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
  <title>График пропускания</title>
</head>
<body>
  <button onclick="generateGraph()">Генерировать график</button>
  <div>
    <label for="n_ext">Показатель преломления:</label>
    <input type="number" id="n_ext" step="0.1" min="0">
  </div>
  <div>
    <label for="layers">Количество слоев:</label>
    <input type="number" id="layers" min="1">
  </div>
 
  <script src="script.js"></script>
</body>
</html>
renderer.js:
JavaScript
1
2
3
4
5
6
const { ipcRenderer } = require('electron');
 
ipcRenderer.on('plotReady', (event, arg) => {
  const plotDiv = document.getElementById('plot');
  plotDiv.innerHTML = '<img src="plot.png">';
});
Добавлено через 1 час 5 минут
Ну либо посоветуйте еще форумы, где можно задать этот вопрос.
0
Эксперт .NET
 Аватар для Usaga
14122 / 9340 / 1350
Регистрация: 21.01.2016
Сообщений: 35,087
12.10.2023, 02:39
Цитата Сообщение от karlhildekruger Посмотреть сообщение
Ну либо посоветуйте еще форумы, где можно задать этот вопрос.
На любом форуме у тебя спросят тоже самое, что и тут: нафига заниматься такой фигнёй?

Цитата Сообщение от karlhildekruger Посмотреть сообщение
когда пробую просто запустить питон файл из командной строки, то ругается на отсутствие библиотеки matplotlib
А эта библиотека есть там, где питон её ожидает увидеть?

Добавлено через 6 минут
Цитата Сообщение от karlhildekruger Посмотреть сообщение
const pythonScriptPath = 'C:\\Users\\apce1\\Desktop\\RAZRABOTKAPO \\my-electron-app\\t.py';
  const command = `python ${pythonScriptPath} ${n_ext} ${layers}`;
Интересно, как это будет работать на другом компьютере?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2023, 02:39
Помогаю со студенческими работами здесь

Изменить поведение программы (ElectronJS)
Приветствую! Есть некая программа, написанная на ElectronJS (фреймворк NodeJS, позволяющий писать desktop приложения на JavaScript) ...

Объединить коды на С++ и Python
да, я ничего не понял. уже спрашивал. маны читал. int main(){ int arr{4, 2, 5}; }

Как работает сортировка с вычислением адреса?
Как работает сортировка с вычислением адреса? Д.Кнут 3 том Искусство программирования там представлен небольшой алгоритм, но он совсем не...

Объединить данные из этих файлов в один DateFrame Python
Здравствуйте , вот у меня сложности со созданием dataframe из двух csv файлов. Датафрейм получается конечно, но вот работа с ним вызывает...

Как сделать выборку периода даты в запросе с вычислением от запрошенной даты
Доброго времени суток! Есть форма, есть подчинённая форма, при запуске формы запрашивается &quot;Дата&quot;, как сделать чтобы в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru