Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
PyQt5

Как обратиться к текстовому полю из другого класса?

11.10.2019, 16:29. Показов 4005. Ответов 6

Студворк — интернет-сервис помощи студентам
Доброго вечера! Подскажите пожалуйста как обратиться к текстовому полю из другого класса? Я что-то никак не могу понять...

Сам вопрос: Как в функции save_data класса MenuBar правильно обратиться к massa_GVS класса Form_explosion что бы получить значение текстового поля?


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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
 
 
 
class Form_explosion(QtWidgets.QWidget):
    '''класс формы для взрыва ОПВБ, СП'''
 
    def __init__(self, parent:QtWidgets.QWidget=None):
        QtWidgets.QWidget.__init__(self, parent)
 
 
 
        self.massa_GVS = QtWidgets.QLineEdit()
 
        self.btn_raschet = QtWidgets.QPushButton("Р&асчет")
        self.btn_ochistka = QtWidgets.QPushButton("О&чистить")
 
 
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.btn_raschet)
        hbox.addWidget(self.btn_ochistka)
 
        layout = QtWidgets.QFormLayout(self)
        layout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
 
        layout.addRow("&Значение массы паров ГВС, кг:", self.massa_GVS)
 
        layout.addRow(hbox)
 
 
 
class MenuBar(QtWidgets.QMenuBar):
 
    def __init__(self, parent:QtWidgets.QMainWindow=None):
        QtWidgets.QMenuBar.__init__(self, parent)
 
        #создаем меню
        self.menuBarFile = self.addMenu("Файл")
 
        self.menuBarFileSaveLog = self.menuBarFile.addAction(QtGui.QIcon(''),"Сохранить данные")
        self.menuBarFileSaveLog.setShortcut('Ctrl+D')
 
        #Блок событий меню
 
        self.menuBarFileSaveLog.triggered.connect(self.save_data)#сохранение data
 
        #Блок событий меню
 
        if not parent: self.show()
 
    def save_data(self):
        print("3")
 
        """
        Как в этой функции правильно обратьться к massa_GVS
        класса Form_explosion что бы получить значение
        текстового поля?
 
        """
 
class Main(QtWidgets.QMainWindow):
 
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
 
        self.customMenuBar = MenuBar(self)
        self.Form_explosion = Form_explosion(self)
 
        self.setMenuBar(self.customMenuBar)
        self.setCentralWidget(self.Form_explosion)
 
        self.resize(600, 300)
        self.setWindowTitle("Расчет взрыва (приведенная масса)")
 
        self.show()
 
 
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    
    sys.exit(app.exec_())
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.10.2019, 16:29
Ответы с готовыми решениями:

Как обратиться к текстовому полю в InputBox?
Подскажите, пожалуйста, как обратиться к текстовому полю в InputBox? Мне необходимо поставить защиту на введенные данные в этом поле

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

Как обратиться к нужному текстовому полю и к кнопке на форме?
Выбрал нужное окно. Теперь нужно 1. активировать текстовое поле, 2. очистить его (если заполнено) 3. внести данные в текстовое...

6
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
12.10.2019, 09:45  [ТС]
Нашел как обратиться к функции:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Class1:                 # Базовый класс
    def __init__(self):
        print("Конструктор базового класса")
    def func1(self):
        print("Метод func1() класса Class1")
 
class Class2(Class1):         # Класс Class2 наследует класс Class1
    def __init__(self):
        print("Конструктор производного класса")
        Class1.__init__(self) # Вызываем конструктор базового класса
    def func1(self):
        print("Метод func1() класса Class2")
        Class1.func1(self)    # Вызываем метод базового класса
 
c = Class2()                  # Создаем экземпляр класса Class2
c.func1()                     # Вызываем метод func1()
Но ведь текстовое поле не функция и плюс оно сидит в __init__... В общем в моей голове пока пазл не складывается.

Добавлено через 9 минут
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
 
 
 
class Form_explosion(QtWidgets.QWidget):
    '''класс формы для взрыва ОПВБ, СП'''
 
    def __init__(self, parent:QtWidgets.QWidget=None):
        QtWidgets.QWidget.__init__(self, parent)
 
        self.massa_GVS = QtWidgets.QLineEdit()
        self.btn_raschet = QtWidgets.QPushButton("Р&асчет")
        self.btn_ochistka = QtWidgets.QPushButton("О&чистить")
 
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.btn_raschet)
        hbox.addWidget(self.btn_ochistka)
 
        layout = QtWidgets.QFormLayout(self)
        layout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
        layout.addRow("&Значение массы паров ГВС, кг:", self.massa_GVS)
        layout.addRow(hbox)
 
 
 
class MenuBar(QtWidgets.QMenuBar, Form_explosion):
 
    def __init__(self, parent:QtWidgets.QMainWindow=None):
        QtWidgets.QMenuBar.__init__(self, parent)
        Form_explosion.__init__(self)
 
        #создаем меню
        self.menuBarFile = self.addMenu("Файл")
        self.menuBarFileSaveLog = self.menuBarFile.addAction(QtGui.QIcon(''),"Сохранить данные")
        self.menuBarFileSaveLog.setShortcut('Ctrl+D')
 
        #Блок событий меню
 
        self.menuBarFileSaveLog.triggered.connect(self.save_data)#сохранение data
 
        if not parent: self.show()
 
    def save_data(self):
        print("3")
 
        Form_explosion.self.massa_GVS(self)
 
        """
        Как в этой функции правильно обратьться к massa_GVS
        класса Form_explosion что бы получить значение
        текстового поля?
 
        """
 
class Main(QtWidgets.QMainWindow):
 
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
 
        self.customMenuBar = MenuBar(self)
        self.Form_explosion = Form_explosion(self)
 
        self.setMenuBar(self.customMenuBar)
        self.setCentralWidget(self.Form_explosion)
 
        self.resize(600, 300)
        self.setWindowTitle("Расчет взрыва (приведенная масса)")
 
        self.show()
 
 
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    
    sys.exit(app.exec_())

Пока пытаюсь: в классе MenuBar наследовать класс Form_explosion, потом вызвать его конструктор Form_explosion.__init__(self), затем обратиться за значением текстового поля Form_explosion.self.massa_GVS(self).
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
12.10.2019, 10:26
Цитата Сообщение от Михалыч Посмотреть сообщение
Нашел как обратиться к функции:
ага, но проще использовать фишки наследования или super

Цитата Сообщение от Михалыч Посмотреть сообщение
В общем в моей голове пока пазл не складывается.
так надо главы по ООП серьезно поштудировать под карандаш, там много особенностей и подводных камней. Чтобы обратиться из одного класса к атрибуту другого можно например передавать ссылку на объект, или создать специальную функцию, вариантов много и там ничего мудрить не надо.
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
12.10.2019, 12:28  [ТС]
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
 
 
 
class Form_explosion(QtWidgets.QWidget):
    '''класс формы для взрыва ОПВБ, СП'''
 
    def __init__(self, parent:QtWidgets.QWidget=None):
        QtWidgets.QWidget.__init__(self, parent)
 
        self.massa_GVS = QtWidgets.QLineEdit()
        self.btn_raschet = QtWidgets.QPushButton("Р&асчет")
        self.btn_ochistka = QtWidgets.QPushButton("О&чистить")
 
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.btn_raschet)
        hbox.addWidget(self.btn_ochistka)
 
        layout = QtWidgets.QFormLayout(self)
        layout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
        layout.addRow("&Значение массы паров ГВС, кг:", self.massa_GVS)
        layout.addRow(hbox)
 
    def condition(self):
        a = str(self.massa_GVS.displayText())
        print(a)
        print("We in condition")
        return a
 
 
 
class MenuBar(QtWidgets.QMenuBar, Form_explosion):
 
    def __init__(self, parent:QtWidgets.QMainWindow=None):
        QtWidgets.QMenuBar.__init__(self, parent)
        Form_explosion.__init__(self)
          #создаем меню
        self.menuBarFile = self.addMenu("Файл")
        self.menuBarFileSaveLog = self.menuBarFile.addAction(QtGui.QIcon(''),"Сохранить данные")
        self.menuBarFileSaveLog.setShortcut('Ctrl+D')
 
        #Блок событий меню
 
        self.menuBarFileSaveLog.triggered.connect(self.save_data)#сохранение data
 
        if not parent: self.show()
 
    def save_data(self):
        print("We in save_data")
 
        a = Form_explosion.condition(self)
        print(a)
        """
        Как в этой функции правильно обратьться к massa_GVS
        класса Form_explosion что бы получить значение
        текстового поля?
 
        """
 
class Main(QtWidgets.QMainWindow):
 
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
 
        self.customMenuBar = MenuBar(self)
        self.Form_explosion = Form_explosion(self)
 
        self.setMenuBar(self.customMenuBar)
        self.setCentralWidget(self.Form_explosion)
 
        self.resize(600, 300)
        self.setWindowTitle("Расчет взрыва (приведенная масса)")
 
        self.show()
 
 
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    
    sys.exit(app.exec_())

Welemir1, спасибо за идею с функцией!) Дописал функцию (def condition(self)), в принципе почти получилось, т.е. если объявить в ней переменную, то из другого класса она вызывается (вместо a = str(self.massa_GVS.displayText()) просто например a = "20"). Но пока если обращаться к полю то self.massa_GVS.displayText() = 0, что не может не расстраивать
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
12.10.2019, 21:56
Лучший ответ Сообщение было отмечено Михалыч как решение

Решение

Вам же надо из конкретного экземпляра класса значение выдернуть. Тут можно так:
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
 
 
 
class Form_explosion(QtWidgets.QWidget):
    '''класс формы для взрыва ОПВБ, СП'''
 
    def __init__(self, parent:QtWidgets.QWidget=None):
        QtWidgets.QWidget.__init__(self, parent)
 
 
 
        self.massa_GVS = QtWidgets.QLineEdit()
 
        self.btn_raschet = QtWidgets.QPushButton("Р&асчет")
        self.btn_ochistka = QtWidgets.QPushButton("О&чистить")
 
 
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.btn_raschet)
        hbox.addWidget(self.btn_ochistka)
 
        layout = QtWidgets.QFormLayout(self)
        layout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
 
        layout.addRow("&Значение массы паров ГВС, кг:", self.massa_GVS)
 
        layout.addRow(hbox)
 
 
 
class MenuBar(QtWidgets.QMenuBar):
 
    def __init__(self, parent:QtWidgets.QMainWindow=None):
        QtWidgets.QMenuBar.__init__(self, parent)
 
        #создаем меню
        self.menuBarFile = self.addMenu("Файл")
 
        self.menuBarFileSaveLog = self.menuBarFile.addAction(QtGui.QIcon(''),"Сохранить данные")
        self.menuBarFileSaveLog.setShortcut('Ctrl+D')
 
        #Блок событий меню
 
        self.menuBarFileSaveLog.triggered.connect(self.save_data)#сохранение data
 
        #Блок событий меню
 
        if not parent: self.show()
 
    def save_data(self):
        print("3")
        import __main__
        x = str(__main__.main.Form_explosion.massa_GVS.displayText())
        print("x=", x)
        """
        Как в этой функции правильно обратьться к massa_GVS
        класса Form_explosion что бы получить значение
        текстового поля?
 
        """
 
class Main(QtWidgets.QMainWindow):
 
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
 
        self.customMenuBar = MenuBar(self)
        self.Form_explosion = Form_explosion(self)
 
        self.setMenuBar(self.customMenuBar)
        self.setCentralWidget(self.Form_explosion)
 
        self.resize(600, 300)
        self.setWindowTitle("Расчет взрыва (приведенная масса)")
 
        self.show()
 
 
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    
    sys.exit(app.exec_())
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
13.10.2019, 10:10  [ТС]
iamvic, Спасибо огромное! То что надо

Добавлено через 1 час 21 минуту
Спасибо, ТабуретY. Еще один вариант:

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
 
 
# data = []
 
 
 
class Form_explosion(QtWidgets.QWidget):
    '''класс формы для взрыва ОПВБ, СП'''
 
    def __init__(self, parent:QtWidgets.QWidget=None):
        QtWidgets.QWidget.__init__(self, parent)
 
        self.massa_GVS = QtWidgets.QLineEdit()
        self.btn_raschet = QtWidgets.QPushButton("Р&асчет")
        self.btn_ochistka = QtWidgets.QPushButton("О&чистить")
 
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.btn_raschet)
        hbox.addWidget(self.btn_ochistka)
 
        layout = QtWidgets.QFormLayout(self)
        layout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
        layout.addRow("&Значение массы паров ГВС, кг:", self.massa_GVS)
        layout.addRow(hbox)
 
    def condition(self):
 
        a = str(self.massa_GVS.displayText())
        # data.append(a)
        print(a)
        print("We in condition")
        return a
 
 
 
class MenuBar(QtWidgets.QMenuBar, Form_explosion):
 
    def __init__(self, expl, parent:QtWidgets.QMainWindow=None):
        QtWidgets.QMenuBar.__init__(self, parent)
        # Form_explosion.__init__(self)
        self.expl = expl
          #создаем меню
        self.menuBarFile = self.addMenu("Файл")
        self.menuBarFileSaveLog = self.menuBarFile.addAction(QtGui.QIcon(''),"Сохранить данные")
        self.menuBarFileSaveLog.setShortcut('Ctrl+D')
 
        #Блок событий меню
 
        self.menuBarFileSaveLog.triggered.connect(self.save_data)#сохранение data
 
        if not parent: self.show()
 
    def save_data(self):
        print("We in save_data")
 
        a = self.expl.Form_explosion.condition()#Form_explosion.condition(self)
        # self.expl.Form_explosion.condition()
        # a = data[0]
        print(a)
        """
        Как в этой функции правильно обратьться к massa_GVS
        класса Form_explosion что бы получить значение
        текстового поля?
 
        """
 
class Main(QtWidgets.QMainWindow):
 
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
 
        self.Form_explosion = Form_explosion(self)
        self.customMenuBar = MenuBar(self, self.Form_explosion)
 
        self.setMenuBar(self.customMenuBar)
        self.setCentralWidget(self.Form_explosion)
 
        self.resize(600, 300)
        self.setWindowTitle("Расчет взрыва (приведенная масса)")
 
        self.show()
 
 
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    
    sys.exit(app.exec_())
0
290 / 205 / 68
Регистрация: 18.09.2019
Сообщений: 407
Записей в блоге: 58
13.10.2019, 11:12
Михалыч, тут можно и по другому сделать, поскольку экземпляры классов self.Form_explosion и self.customMenuBar порождает один и тот же родитель.

Если
Python
1
2
        import __main__
        x = str(__main__.main.Form_explosion.massa_GVS.displayText())
заменить на
Python
1
        x = str(self.parent().Form_explosion.massa_GVS.displayText())
то тоже будет работать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2019, 11:12
Помогаю со студенческими работами здесь

Как обратиться к полю объекта класса Car, который находится в массиве класса Cars?
Помогите пожалуйста разобраться. Ниже три разных модуля. Как обратиться к полю объекта класса Car, который находится в массиве класса Cars?...

Как обратиться к полю другого документа в запросе SQL?
И так, есть БД в MS SQL Server, в 1С есть документ "Заказ на производство" есть обработка АРМ диспетчера есть запрос ...

Как обратиться к полю объекта дочернего класса если он(объект) находится в массиве типа родительского класса?
Как обратиться к полю объекта дочернего класса если он(объект) находится в массиве типа родительского класса? Можно ли это сделать без...

Как обратиться к полю объекта класса?
Доброго времени суток! Необходимо вывести информацию о векторе . Подскажите как обратиться к полям класса в методе, что бы не передавать...

Как обратиться к полю наследника класса
Создал наследника класса PictureABC, обладающего уникальными полями. В процессе работы потребовалось найти этот объект и обратиться к его...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru