Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708

Значение индикатора в другом модуле на PyQt5

26.01.2020, 18:17. Показов 2922. Ответов 12

Студворк — интернет-сервис помощи студентам
Есть класс создания электронного индикатора QLCDNumber, требуется передача значения с экрана индикатора в другой модуль.

Первый модуль
Python
1
2
3
4
5
6
7
8
9
10
class TabBinary(QtWidgets.QWidget):
    """Класс окна вкладки
    """
    def __init__(self):
        super().__init__()
        # Экран числа
        vbox = QtWidgets.QVBoxLayout()  # создаем контейнер
        self.lcdNumber = QtWidgets.QLCDNumber(self)  # создаем электронный индикатор
        self.lcdNumber.setToolTip("Выбранное число")  # всплывающая подсказка
        vbox.addWidget(self.lcdNumber)  # добавляем в вертикальный контейнер
...здесь есть продолжение в виде добавления дополнительных индикаторов, кнопок...т.е. только view

Знаю, что данную возможность можно выполнить следующей инструкцией:

self.lcdNumber.intValue() и вроде как бы она работает в данном модуле если ее таким образом прописать.

Мне необходимо передать данное значение в другой модуль в функцию clickRun для его дальнейшей обработке, вот часть кода, где ей место:

Второй модуль
Python
1
2
3
4
5
6
7
8
9
10
11
class RunButton(QtCore.QObject):
    """Класс обработки сигнала кнопки "ВЫПОЛНИТЬ" и "УЗНАТЬ БОЛЬШЕ"
    """
 
    def __init__(self):
        QtCore.QObject.__init__(self)
 
    @QtCore.pyqtSlot(bool, name="clickRun")  # слот для обработки
    def clickRun(self):
        """Функция выполнения результата нажатия "ВЫПОЛНИТЬ"
        """
...здесь есть продолжение в виде обработки сигналов индикаторов, кнопок...т.е. только presenter

Подключаю первый (предоставленный выше) модуль, вызываю инструкцией:

ИмяМодуля.TabBinary.lcdNumber.intValue() - не работает??? в контексте данного примера.
Подключался таким образом в других случаях все норм. Инструкция не обращается к классу TabBinary, я так понял. Что делать, как решить и узнать в чем проблема.
Если не работает значит я кардинально неправильно что-то понимаю.
Кто...нть помогите, что я делаю не так, все сделать необходимо именно так как представленно в данном контексте, т.к. мне необходимо реализовать именно данный шаблон.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2020, 18:17
Ответы с готовыми решениями:

Значение переменной из одного модуля получить в другом модуле
Народ подскажите как сделать что бы по нажатию на кнопки в одном unit. значение например "Константы или какой нить переменной"...

Получить значение переменной при нажатии кнопки с lambda и использовать в другом модуле/классе
Добрый день, пишу чат с GUI, есть несколько классов в разных модулях, для окон регистрации и логина, ну само окно чата, проблема в...

Использование типа в другом модуле
Добрый день! Есть модуль в котором указана запись : type recSprite = record ... end; Есть другой модуль где нужно...

12
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
26.01.2020, 18:53
данные передаются через сигнал->слот
https://pythonworld.ru/gui/pyq... gnals.html
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
26.01.2020, 19:49  [ТС]
vic5710, спасибо, но это не ответ. Я уже осуществил способ передачи данных именно с помощью слотов @QtCore.pyqtSlot(bool, name="clickRun"). Мне нужен сам сигнал, который уже у получателя, т.е. на экране индикатора. Вот это значение сигнала self.lcdNumber.intValue(). Я где-то просчитался с ООП, я что-то не понял во взаимодействии объекта (значение экрана индикатора) в классе вкладки и другого модуля. А по приведенной Вами ссылке только примеры, показывающие реализацию еще одного метода PyQt5.
Пожалуйста посмотрите повнимательнее сам код и постарайтесь ответить на вопрос. Или сказать можно реализовать данное событие или нет.

Добавлено через 7 минут
Мне необходим сам сигнал в функцию-слот clickRun (). Например 42 или 8645. Сам способ обращения к данному объекту self.lcdNumber.intValue() в классе TabBinary из модуля presenter.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
26.01.2020, 20:05
и где у вас сигнал? с чем коннектится?

Не по теме:

учите матчасть


https://zhakob.blogspot.com/2016/08/pyqt5.html
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
27.01.2020, 01:04  [ТС]
Цитата Сообщение от vic5710 Посмотреть сообщение
и где у вас сигнал? с чем коннектится?
индикатор шкалы и передача сигнала, уже реализована. Мне необходимо само значение на экране, для понимания почему не работает ООП в данной ситуации, как вот здесь например:

test.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
class FirstClass():
    def __init__(self, x=10):
        self.x = x
 
    class SecondClass():
        def __init__(self):
            super().__init__()
 
class ScreenClass(FirstClass.SecondClass):
    def __init__(self):
        super().__init__()
        self.x = 30
test_002
Python
1
2
3
4
5
import test
 
a = test.ScreenClass()
 
print(a.x)
Только переменная не x, а
Python
1
self.lcdNumber.intValue()
Добавлено через 1 минуту
во втором модуле (например test_002.py) обращение к переменной x = а self.lcdNumber.intValue() невозможно, почему?

Добавлено через 3 часа 9 минут
Вот что он выдает при обращении к этому объекту:

<built-in function x>
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
27.01.2020, 04:38
Приведите минимальный запускаемый пример
0
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
27.01.2020, 12:08  [ТС]
tooru, пример.

Запускать данный модуль - test
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
53
54
55
56
57
58
#-*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets, QtCore, QtGui
 
import test_002
 
WIDTH = 360
HEIGHT = 240
 
class TabBinary(QtWidgets.QWidget):
    """Класс вызываемого экземпляра 
    """
    x = 20
    def __init__(self):
        super().__init__()
        self.y
        self.setWindowTitle("Пример")
        self.resize(WIDTH, HEIGHT)
        self.show()
 
        # Экран числа
        vbox = QtWidgets.QVBoxLayout()  # создаем контейнер
        self.lcdNumber = QtWidgets.QLCDNumber(self)  # создаем электронный индикатор
        self.lcdNumber.setToolTip("Выбранное число")  # всплывающая подсказка
        vbox.addWidget(self.lcdNumber)  # добавляем в вертикальный контейнер
        self.setLayout(vbox)  # передача ссылки родителю
 
        # Выбор числа
        self.selectNumber = QtWidgets.QSlider(self)  # создаем шкалу с ползунком
        self.selectNumber.setOrientation(QtCore.Qt.Horizontal)  # горизонтальное раcположение шкалы
        self.selectNumber.setToolTip("Выберите число")  # всплывающая подсказка
        self.selectNumber.setTickInterval(1)
        self.selectNumber.setMinimum(2)
        self.selectNumber.setMaximum(1000)
        self.selectNumber.valueChanged.connect(self.changedValue) # вызов функции вывода значения на экран
        vbox.addWidget(self.selectNumber)  # добавляем в вертикальный контейнер
 
        # Кнопка "ЗНАЧЕНИЕ"
        self.pushButton = QtWidgets.QPushButton("&ЗНАЧЕНИЕ")  # создаем кнопку
        self.pushButton.setIcon(QtGui.QIcon("https://www.cyberforum.ru/images/binary_icon.png"))  # добавляем иконку
        self.pushButton.setToolTip("Нажми меня")  # всплывающая подсказка
        self.pushButton.clicked.connect(test_002.RunButton.clickRun)
        vbox.addWidget(self.pushButton)  # добавляем в вертикальный контейнер
 
 
    def changedValue(self):
        """Функция отображения на экране выбранного значения
        """
        size = self.selectNumber.value()
        self.lcdNumber.display(str(size))
        #print(self.lcdNumber.intValue()) # вывод необходимого значения
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = TabBinary()
    ico = window.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxCritical) 
    window.show()
    sys.exit(app.exec())
модуль - test_002

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from PyQt5 import QtCore, QtWidgets, QtGui
 
import test
 
 
class RunButton(QtCore.QObject):
    """Класс обработки сигнала кнопки "ЗНАЧЕНИЕ"
    """
 
    def __init__(self):
        QtCore.QObject.__init__(self)
 
    @QtCore.pyqtSlot(bool, name="clickRun")  # слот для обработки
    def clickRun(self):
        """Функция выполнения результата нажатия "ЗНАЧЕНИЕ"
        """
        print("Кнопка нажата")
        print(test.TabBinary.x) # x в глобальной области видимости
        print(test.TabBinary.y) # y в локальной области видимости
        # print(test.TabBinary.lcdNumber.intValue()) # НЕОБХОДИМОЕ ЗНАЧЕНИЕ
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
27.01.2020, 13:06
Цитата Сообщение от AlexMarkov Посмотреть сообщение
self.pushButton.clicked.connect(test_002 .RunButton.clickRun)
вот это зачем?
для передачи данных между классами создайте свой сигнал, если стандартных мало
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
from PyQt5 import Qt
class LCD(Qt.QLCDNumber):
    def __init__(self):
        super().__init__()
 
class Line(Qt.QLineEdit):
    valueChanged = Qt.pyqtSignal(str)
    def __init__(self):
        super().__init__()
        self.returnPressed.connect(self.on_change)
    def on_change(self):
        self.valueChanged.emit(self.text())
        
if __name__=="__main__":
    a = Qt.QApplication([])
    w = Line()
    w.move(0,0)
    w.resize(200,100)
    w1 = LCD()
    w1.resize(200,100)
    w.valueChanged.connect(w1.display)
    w.show()
    w1.show()
    a.exec_()
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
27.01.2020, 15:20  [ТС]
Цитата Сообщение от vic5710 Посмотреть сообщение
вот это зачем?
Это учебный материал, мне необходимо реализовать выполнение данной задачи именно так как заданно в вопросе "Значение индикатора в другом модуле PyQt5".

Цитата Сообщение от vic5710 Посмотреть сообщение
для передачи данных между классами создайте свой сигнал, если стандартных мало
Cпасибо за метод emit(), но это не решение и не ответ:

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
53
54
55
56
57
58
59
60
61
62
63
#-*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets, QtCore, QtGui, Qt
 
import test_002
 
WIDTH = 360
HEIGHT = 240
 
class TabBinary(QtWidgets.QWidget):
    """Класс вызываемого экземпляра 
    """
    screenChanged = Qt.pyqtSignal(int)
    x = 20
    def __init__(self):
        super().__init__()
        self.y
        self.setWindowTitle("Пример")
        self.resize(WIDTH, HEIGHT)
        self.show()
 
        # Экран числа
        vbox = QtWidgets.QVBoxLayout()  # создаем контейнер
        self.lcdNumber = QtWidgets.QLCDNumber(self)  # создаем электронный индикатор
        self.lcdNumber.setToolTip("Выбранное число")  # всплывающая подсказка
        vbox.addWidget(self.lcdNumber)  # добавляем в вертикальный контейнер
        self.setLayout(vbox)  # передача ссылки родителю
 
        # Выбор числа
        self.selectNumber = QtWidgets.QSlider(self)  # создаем шкалу с ползунком
        self.selectNumber.setOrientation(QtCore.Qt.Horizontal)  # горизонтальное раcположение шкалы
        self.selectNumber.setToolTip("Выберите число")  # всплывающая подсказка
        self.selectNumber.setTickInterval(1)
        self.selectNumber.setMinimum(2)
        self.selectNumber.setMaximum(1000)
        self.selectNumber.valueChanged.connect(self.changedValue) # вызов функции вывода значения на экран
        vbox.addWidget(self.selectNumber)  # добавляем в вертикальный контейнер
 
        # Кнопка "ЗНАЧЕНИЕ"
        self.pushButton = QtWidgets.QPushButton("&ЗНАЧЕНИЕ")  # создаем кнопку
        self.pushButton.setIcon(QtGui.QIcon("images/binary_icon.png"))  # добавляем иконку
        self.pushButton.setToolTip("Нажми меня")  # всплывающая подсказка
        self.pushButton.clicked.connect(self.screen)
        vbox.addWidget(self.pushButton)  # добавляем в вертикальный контейнер
 
 
    def changedValue(self):
        """Функция отображения на экране выбранного значения
        """
        size = self.selectNumber.value()
        self.lcdNumber.display(str(size))
        #print(self.lcdNumber.intValue()) # вывод необходимого значения
 
    def screen(self):
        self.screenChanged.emit(self.lcdNumber.intValue())
        print(self.lcdNumber.intValue()) 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = TabBinary()
    ico = window.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxCritical) 
    window.show()
    sys.exit(app.exec())
Мне необходим ответ на поставленный вопрос почему невозможно обращение к self.y в другом модуле? Что то в коробочке PyQt5, так как обращение к данному объекту по принципу ООП, я так понимаю возможно.
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
27.01.2020, 16:03
Цитата Сообщение от AlexMarkov Посмотреть сообщение
Мне необходим ответ на поставленный вопрос почему невозможно обращение к self.y в другом модуле? Что то в коробочке PyQt5, так как обращение к данному объекту по принципу ООП, я так понимаю возможно.
Нет, обращение к полю объекта возможно только при наличии объекта, у вас объекта нет и его поля тоже нет

Цитата Сообщение от AlexMarkov Посмотреть сообщение
print(test.TabBinary.x) # x в глобальной области видимости
Нет, x доступен из-за особенностей python, так как в python все объект, то сам класс тоже объект и этот x является полем полем класса
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
27.01.2020, 16:44  [ТС]
Цитата Сообщение от tooru Посмотреть сообщение
у вас объекта нет и его поля тоже нет
Это уже ближе к ответу, что означает <built-in function y>. Такая же ситуация со значением self.lcdNumber.intValue().

Мне необходимо вывести целочисленное значение self.lcdNumber.intValue() в глобальную область видимости для дальнейшей работы с ним или способ получения сигнала данного значения в другом модуле.

Его нет в глобальной области видимости из-за каких-то ограничений накладываемых классами родителя QtWidgets.QWidget или из-за того, что он находится в классе конструктора(инициализатора). Как выйти из этой ситуации?

Добавлено через 2 минуты
Инкапсуляция, полиморфизм и наследование главные принципы ООП в python, поэтому менять что-то в коде не имеет смысла, нужен другой подход.

Добавлено через 6 минут
Код работает, значение выводится на экран. Мне необходим еще один модуль для работы над этим значением. Не класс, так как мне необходимо наглядно проработать вопрос c шаблонами ModelViewControl, а конкретнее Model View Presenter. Это не важно, необходимо найти выход из данной ситуации. Приношу извинения за, возможно, неудачно приведенные примеры, времени мало, переменной "y" специально не было присвоено значение, чтобы наглядно показать в чем суть проблемы...
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
27.01.2020, 17:49
Лучший ответ Сообщение было отмечено AlexMarkov как решение

Решение

Цитата Сообщение от AlexMarkov Посмотреть сообщение
что означает <built-in function y>
У объекта QtWidgets.QWidget есть методы x() и y(), x вы перекрываете, а y ничего не присваиваете, вот и идет обращение к методу

В общем о проблеме, сигнал кнопки может передать только bool, а вам нужно получить объект класса, нужно создать свой сигнал, который будет возвращать object и привязать его к слоту

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
53
54
55
56
57
58
59
60
61
62
63
64
65
#-*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets, QtCore, QtGui
 
 
import test_002
 
WIDTH = 360
HEIGHT = 240
 
class TabBinary(QtWidgets.QWidget):
    """Класс вызываемого экземпляра 
    """
    valueChanged = QtCore.pyqtSignal(object)
 
    x = 20
    def __init__(self):
        super().__init__()
        self.y = 5
        self.setWindowTitle("Пример")
        self.resize(WIDTH, HEIGHT)
        self.show()
 
        # Экран числа
        vbox = QtWidgets.QVBoxLayout()  # создаем контейнер
        self.lcdNumber = QtWidgets.QLCDNumber(self)  # создаем электронный индикатор
        self.lcdNumber.setToolTip("Выбранное число")  # всплывающая подсказка
        vbox.addWidget(self.lcdNumber)  # добавляем в вертикальный контейнер
        self.setLayout(vbox)  # передача ссылки родителю
 
        # Выбор числа
        self.selectNumber = QtWidgets.QSlider(self)  # создаем шкалу с ползунком
        self.selectNumber.setOrientation(QtCore.Qt.Horizontal)  # горизонтальное раcположение шкалы
        self.selectNumber.setToolTip("Выберите число")  # всплывающая подсказка
        self.selectNumber.setTickInterval(1)
        self.selectNumber.setMinimum(2)
        self.selectNumber.setMaximum(1000)
        self.selectNumber.valueChanged.connect(self.changedValue) # вызов функции вывода значения на экран
        vbox.addWidget(self.selectNumber)  # добавляем в вертикальный контейнер
 
        # Кнопка "ЗНАЧЕНИЕ"
        self.pushButton = QtWidgets.QPushButton("&ЗНАЧЕНИЕ")  # создаем кнопку
        self.pushButton.setIcon(QtGui.QIcon("https://www.cyberforum.ru/images/binary_icon.png"))  # добавляем иконку
        self.pushButton.setToolTip("Нажми меня")  # всплывающая подсказка
        self.valueChanged.connect(test_002.RunButton.clickRun)
        self.pushButton.clicked.connect(self.signal_emited)
        vbox.addWidget(self.pushButton)  # добавляем в вертикальный контейнер
 
    def signal_emited(self):
        self.valueChanged.emit(self)
 
 
    def changedValue(self):
        """Функция отображения на экране выбранного значения
        """
        size = self.selectNumber.value()
        self.lcdNumber.display(str(size))
        #print(self.lcdNumber.intValue()) # вывод необходимого значения
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = TabBinary()
    ico = window.style().standardIcon(QtWidgets.QStyle.SP_MessageBoxCritical) 
    window.show()
    sys.exit(app.exec())
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from PyQt5 import QtCore, QtWidgets, QtGui
 
import test
 
 
class RunButton(QtCore.QObject):
    """Класс обработки сигнала кнопки "ЗНАЧЕНИЕ"
    """
 
    def __init__(self):
        super().__init__()
 
    @QtCore.pyqtSlot(object, name="clickRun")  # слот для обработки
    def clickRun(obj):
        """Функция выполнения результата нажатия "ЗНАЧЕНИЕ"
        """
        print("Кнопка нажата")
        print(obj.x) # x в глобальной области видимости
        print(obj.y) # y в локальной области видимости
        print(obj.lcdNumber.intValue()) # НЕОБХОДИМОЕ ЗНАЧЕНИЕ
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
27.01.2020, 19:29  [ТС]
tooru, спасибо, что и требовалось доказать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2020, 19:29
Помогаю со студенческими работами здесь

Использование переменной в другом модуле
Доброго всем времени суток! Такая задачка возникла: есть главный модуль, в котором инициализируется несколько строковых переменных (в...

Реализация метода класса в другом модуле
Имеется Unit1 с формой Form1 типа TForm1. У типа TForm1 описан метод procedure abc(). Как реализовать этот метод в другом модуле?

Не могу получить значения свойства в другом модуле
имеется класс public class QueryText { private string text; public QueryText() { } ...

Как обратиться к компоненту из Frame в другом модуле?
Как обратится к компоненту из Frame в другом модуле? Например если мне нужно обратится к какому-то компоненту из формы (допустим она будет...

LNK 2005, переменные уже определены в другом модуле
Здравия желаю! Проблема в том, что 2 эти статические переменные определяются еще раз. Всего 2 .cpp и в каждый добавлен .h с этим классом....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru