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

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

11.10.2023, 15:34. Показов 725. Ответов 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
14310 / 9391 / 1355
Регистрация: 21.01.2016
Сообщений: 35,420
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
371 / 336 / 83
Регистрация: 17.04.2022
Сообщений: 1,119
Записей в блоге: 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
14310 / 9391 / 1355
Регистрация: 21.01.2016
Сообщений: 35,420
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
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru