Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 142

Необходимо сформировать json из данных в полях формы

10.07.2022, 12:42. Показов 813. Ответов 11
Метки json (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Необходимо из полей формы извлечь введенные данные (переменные: con, za, vo, om, am, desc). Посмотреть, какая кнопка была нажата и извлечь переменную, присвоенную нажатой кнопке (v1, v2 или v3). И записать все эти переменные со значениями в файл json при нажатии кнопки OK.
Насколько я понимаю, необходимо создать словарь переменных.
В моем случае - ключ это название переменной. Значение равно значению переменной.
Не получается создать словарь.
Буду признателен, если покажете ошибки или подправите код.
Благодарю!

Вот мой код.
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
from PyQt5 import uic, QtWidgets, QtGui
import json, codecs
import os.path
import time
 
Form, _ = uic.loadUiType("Test.ui")
 
#za, vo, om, am, desc, con = str()
 
class Ui(QtWidgets.QDialog, Form):
    def __init__(self):
        super(Ui, self).__init__()
        self.setupUi(self)
        self.comboBox.setObjectName("comboBox") # выводим комбобокс
        options = ["", "Line1", "Line2"]   # в одну строку
        for option in options:
            self.comboBox.addItem(option)
        za = self.lineEdit.text()
        vo = self.lineEdit_2.text()
        om = self.lineEdit_3.text()
        am = self.lineEdit_4.text()
        desc = self.textEdit.toPlainText()
 
        self.pushButton.clicked.connect(self.printButtonPressed)
        self.pushButton_2.clicked.connect(self.printButton_2Pressed)
        self.pushButton_3.clicked.connect(self.printButton_3Pressed)
        self.pushButton_4.clicked.connect(self.printButton_4Pressed)
 
        print('Измерение:', za)
        print('Вольты:', vo)
        print('Омы:', om)
        print('Амперы:', am)
        print('Дополнительно:', desc)
 
        # --------------------------------------------------------
    def find(self):
        # finding the content of current item in combo box
        con = self.combo_box.currentText()
        print(con)
 
    def printButtonPressed(self):  # обработка нажатия на кнопку 1
        v1 = 1
        print('1:1')
 
    def printButton_2Pressed(self):  # обработка нажатия на кнопку 2
        v2 = 10
        print('1:10')
 
    def printButton_3Pressed(self):  # обработка нажатия на кнопку 3
        v3 = 100
        print('1:100')
 
    def printButton_4Pressed(self):
        # with open('data.json', 'wb') as f:
        #     json.dump(dict, codecs.getwriter('utf-8')(f), ensure_ascii=False)
        print('press')
 
    #dict{'za':, 'vo':, 'om':, 'am':, 'desk':, 'con':, 'v1':, 'v2':, 'v3":}
 
if  __name__== "__main__":
    import sys
 
    app = QtWidgets.QApplication(sys.argv)
    w = Ui()
    w.show()
    sys.exit(app.exec_())
Код формы Test.ui:
Кликните здесь для просмотра всего текста

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>591</width>
<height>231</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(212, 212, 212);</string>
</property>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>10</x>
<y>140</y>
<width>571</width>
<height>51</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html4... &quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>71</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;Делитель&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>90</x>
<y>60</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;MS Shell Dlg 2&quot;;
background-color: rgb(172, 172, 172);</string>
</property>
<property name="text">
<string>1:1</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>170</x>
<y>60</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;MS Shell Dlg 2&quot;;
background-color: rgb(172, 172, 172);</string>
</property>
<property name="text">
<string>1:10</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_3">
<property name="geometry">
<rect>
<x>250</x>
<y>60</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;MS Shell Dlg 2&quot;;
background-color: rgb(172, 172, 172);</string>
</property>
<property name="text">
<string>1:100</string>
</property>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>10</x>
<y>100</y>
<width>161</width>
<height>31</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 10pt &quot;Calibri&quot;;</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:16pt;&quot;&gt;Дополнительно:&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_4">
<property name="geometry">
<rect>
<x>500</x>
<y>200</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;MS Shell Dlg 2&quot;;
background-color: rgb(236, 236, 236);</string>
</property>
<property name="text">
<string>OK</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>420</x>
<y>30</y>
<width>31</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;I, A&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="geometry">
<rect>
<x>460</x>
<y>0</y>
<width>131</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;9/07/2022 13:30:28&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit">
<property name="geometry">
<rect>
<x>170</x>
<y>30</y>
<width>51</width>
<height>20</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Calibri&quot;;
background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_2">
<property name="geometry">
<rect>
<x>270</x>
<y>30</y>
<width>41</width>
<height>20</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Calibri&quot;;
background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_3">
<property name="geometry">
<rect>
<x>370</x>
<y>30</y>
<width>41</width>
<height>20</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Calibri&quot;;
background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_4">
<property name="geometry">
<rect>
<x>460</x>
<y>30</y>
<width>41</width>
<height>20</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Calibri&quot;;
background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QComboBox" name="comboBox">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>69</width>
<height>22</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt &quot;Calibri&quot;;
background-color: rgb(255, 255, 255);</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>230</x>
<y>30</y>
<width>41</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;U, В&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>320</x>
<y>30</y>
<width>41</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;R, Ом&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>110</x>
<y>30</y>
<width>51</width>
<height>21</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 10pt &quot;Calibri&quot;;</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:12pt;&quot;&gt;Замер&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.07.2022, 12:42
Ответы с готовыми решениями:

как из данных репитера сформировать JSON?
ПРивет всем! Подскажите пожалуйста, как из данных репитера сформировать строку JSON?

Как сформировать JSON для данных разных категорий?
У меня есть данные разных категорий: список контактов телефона, текстовые сообщения,координаты местоположения, фото(изображения) в формате...

Необходимо среагировать на изменения данных в любом контроле формы
У меня проблемма - мне необходимо среагировать на изменения данных в любом контроле формы, подключенный к DataSet через Data Binding. Я...

11
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
10.07.2022, 13:34
MaxGal,
Python
1
2
3
4
5
6
7
8
9
dic_ = {'Измерение': za,
        'Вольты': vo,
        'Омы': om,
        'Амперы': am,
        'Дополнительно': desc,
        'v1': v1,
        'v2': v2,
        'v3': v3
       }
0
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 142
10.07.2022, 13:34  [ТС]
Собственно, не могу сообразить как ввести в словарь значение, считанное из поля.
vo - имя переменной (в моем случае ключ словаря)
Предположим, я ввожу в поле формы значение 100 (вольт).
Я могу присвоить это значение переменной vo:
Python
1
vo = self.lineEdit_2.text()
А как мне создать пару? Собственно, как ввести текущее значение, введенное в поле формы в качестве значения к ключу vo? Ну и то же с остальными переменными (включая v1-v3).
Python
1
dict {'vo': 100}
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
10.07.2022, 13:41
Python
1
2
3
4
5
6
7
8
9
dic_ = {'Измерение': self.lineEdit.text(),
        'Вольты': self.lineEdit_2.text(),
        'Омы': self.lineEdit_3.text(),
        'Амперы': self.lineEdit_4.text(),
        'Дополнительно': self.lineEdit_5.text(),
        'v1': v1,
        'v2': v2,
        'v3': v3
       }
Добавлено через 1 минуту
v1, v2, v3 сделайте полями класса
1
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 142
10.07.2022, 17:06  [ТС]
Red white socks, отправил свое сообщение, не увидев Вашего сообщение.
Благодарю.
Попробовал добавить в исходник - возникает проблема с видимостью переменных за пределами функции.
В какую строку кода вставить этот код?

Добавлено через 1 минуту
Red white socks, благодарю,
идея понятна. Сейчас буду пробовать.

Добавлено через 2 часа 53 минуты
Red white socks,
что-то делаю не так. При попытке выполнить код, пишет:
Python
1
<class 'dict'>
Где-то не там вставляю словарь.

Мой код:
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
from PyQt5 import uic, QtWidgets, QtGui
import json, codecs
import os.path
import time
 
Form, _ = uic.loadUiType("Test.ui")
 
class Ui(QtWidgets.QDialog, Form):
    def __init__(self):
        super(Ui, self).__init__()
        self.setupUi(self)
        self.comboBox.setObjectName("comboBox") # выводим комбобокс
        options = ["", "Line1", "Line2"]   # в одну строку
        for option in options:
            self.comboBox.addItem(option)
        za = self.lineEdit.text()
        vo = self.lineEdit_2.text()
        om = self.lineEdit_3.text()
        am = self.lineEdit_4.text()
        desc = self.textEdit.toPlainText()
        v1 = self.pushButton.clicked.connect(self.printButtonPressed)
        v2 = self.pushButton_2.clicked.connect(self.printButton_2Pressed)
        v3 = self.pushButton_3.clicked.connect(self.printButton_3Pressed)
        self.pushButton_4.clicked.connect(self.printButton_4Pressed)
 
        dict = {'Измерение': self.lineEdit.text(),
                'Вольты': self.lineEdit_2.text(),
                'Омы': self.lineEdit_3.text(),
                'Амперы': self.lineEdit_4.text(),
                'v1': v1,
                'v2': v2,
                'v3': v3
                }
 
    # def find(self):
    #     # finding the content of current item in combo box
    #     con = self.combo_box.currentText()
    #     print(con)
 
    def printButtonPressed(self):  # обработка нажатия на кнопку 1
        v1 = 1
        print('1:1')
 
    def printButton_2Pressed(self):  # обработка нажатия на кнопку 2
        v2 = 10
        print('1:10')
 
    def printButton_3Pressed(self):  # обработка нажатия на кнопку 3
        v3 = 100
        print(v3)
 
    def printButton_4Pressed(self):
        # with open('data.json', 'wb') as f:
        #     json.dump(dict, codecs.getwriter('utf-8')(f), ensure_ascii=False)
        print(dict)
 
if  __name__== "__main__":
    import sys
 
    app = QtWidgets.QApplication(sys.argv)
    w = Ui()
    w.show()
    sys.exit(app.exec_())
Добавлено через 26 минут
Если подставлять значения, которые выводятся при нажатии на кнопку "ОК" - значения выводятся из любого поля. А вот сам словарь не выводится.
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
10.07.2022, 17:34
MaxGal, ваш код выполняется без ошибок, по крайней мере у меня...
Правда, что там выполняется - вычеркнуто цензурой.
1. __init__ выполняется при инициализации класса, все значения полей формы понятно пустые, поэтому
Python
1
2
3
4
5
        za = self.lineEdit.text()
        vo = self.lineEdit_2.text()
        om = self.lineEdit_3.text()
        am = self.lineEdit_4.text()
        desc = self.textEdit.toPlainText()
просто бессмысленно.
2. dict - не очень хорошее имя для переменной, поскольку оно скрывает функцию dict.
3. Сам словарь dict (давайте ее назовем все же dict_) лучше сделать полем класса, чтобы его можно видеть и менять в методах класса.
4.Изменения в полях формы у вас сейчас никак не отражаются. Изменения полей в форме должны приводить к изменениям объектов/полей класса либо непосредственно после введения значений, либо по нажатию кнопки, например в функции printButton_4Pressed.
5. Нажатие кнопок, отвечающих за v1, v2, v3 должны менять dict_ сразу:
Python
1
2
    def printButtonPressed(self):  # обработка нажатия на кнопку 1
        dict_['v1'] = 1
6. Насколько я понимаю v1, v2, v3 - это значения некоторого множителя и активно может быть только одно значение.
Соответственно за группу этих элементов должна отвечать одна переменная, а сами элементы формы должны быть toggle button (переключатель) и при нажатии кнопки, отжимать другие. (не в курсе есть ли в Qt5 группа переключателей, но если есть - поставить ее)
1
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 142
10.07.2022, 20:30  [ТС]
Да, понятно.
1.У меня есть (вложена под спойлером) форма. Я ввожу данные в нее и они выводятся (поштучно).
2.Понял, благодарю.
3.ОК, благодарю.
4.Написал в п.1.
5.Да, отличная идея.
6.Да, совершенно верно. Тоже об этом думал. Отжимать можно после нажатия кнопки "ОК" (и сохранения json). Буду искать имеется ли такая возможность. По-идее должно быть.
Благодарю!

Добавлено через 2 часа 25 минут
Как подключать кнопку-переключатель нашел. Не подключаю, пока не отлажу этот код.
Не могу найти что делаю не так. Уже и переменную словаря объявил - global.
Уже упарился искать.
В любом случае нажатие на 4-ю кнопку приводит к выводу ошибки:
Python
1
Process finished with exit code 1073741845
print на кнопках_Pressed оставил исключительно для контроля функционала (на этапе отладки).

Код такой:
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
from PyQt5 import uic, QtWidgets, QtGui
import json, codecs
import os.path
import time
 
Form, _ = uic.loadUiType("Test.ui")
 
class Ui(QtWidgets.QDialog, Form):
    def __init__(self):
        super(Ui, self).__init__()
        self.setupUi(self)
        self.comboBox.setObjectName("comboBox") # выводим комбобокс
        options = ["", "Line1", "Line2"]   # в одну строку
        for option in options:
            self.comboBox.addItem(option)
        self.lineEdit.text()
        self.lineEdit_2.text()
        self.lineEdit_3.text()
        self.lineEdit_4.text()
        desc = self.textEdit.toPlainText()
        v1 = self.pushButton.clicked.connect(self.printButtonPressed)
        v2 = self.pushButton_2.clicked.connect(self.printButton_2Pressed)
        v3 = self.pushButton_3.clicked.connect(self.printButton_3Pressed)
        self.pushButton_4.clicked.connect(self.printButton_4Pressed)
        global dict_ = {'za': self.lineEdit.text(),
                 'vo': self.lineEdit_2.text(),
                 'om': self.lineEdit_3.text(),
                 'am': self.lineEdit_4.text(),
                 'v1': v1,
                 'v2': v2,
                 'v3': v3
                 }
 
    def find(self):
        # finding the content of current item in combo box
        con = self.combo_box.currentText()
        print('line', con)
 
    def printButtonPressed(self):  # обработка нажатия на кнопку 1
        #dict_['v1'] = 1
        v1 = 1
        print('1:1')
 
    def printButton_2Pressed(self):  # обработка нажатия на кнопку 2
        v2 = 10
        print('1:10')
 
    def printButton_3Pressed(self):  # обработка нажатия на кнопку 3
        v3 = 100
        print('1:100')
 
    def printButton_4Pressed(self):
        # with open('data.json', 'wb') as f:
        #     json.dump(dict_, codecs.getwriter('utf-8')(f), ensure_ascii=False)
        print(dict_)
 
if  __name__== "__main__":
    import sys
 
    app = QtWidgets.QApplication(sys.argv)
    w = Ui()
    w.show()
    sys.exit(app.exec_())
Help me, please.
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
10.07.2022, 20:56
MaxGal, как-то все советы мимо пролетели...

Добавлено через 3 минуты
MaxGal, вы понимаете, что все изменения в lineEdit нигде не фиксируются?
0
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 142
10.07.2022, 22:28  [ТС]
Red white socks, когда я ввожу значения в форму и нажимаю "ОК", то значения из формы выводятся.
Мне это и нужно. Только я хочу их вывести в виде словаря.
Т.е. считать текущие значения из полей в словарь, сформировать из словаря файл json и, потом, очистить все поля до следующего замера / расчета. На момент формирования словаря в полях имеются значения. Их нельзя брать из полей и использовать для формирования словаря?
Или я что-то не так понимаю?
Миниатюры
Необходимо сформировать json из данных в полях формы  
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
11.07.2022, 01:01
MaxGal, у вас другой код)
Словарь собирайте не при инициализации, а при нажатии кнопки.
Глобальная переменная не нужна.
0
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 142
11.07.2022, 21:02  [ТС]
Red white socks, благодарю, за дельные советы!
Да, я добавил в код три строки с командой print, чтобы визуально убедиться, что данные считываются (и выводятся на печать).
Немного доработал код. Вывод с кнопок пока не подключал.

Возник вопрос. Почему, если к кнопке-4 привязать значения с переменными:
Python
1
2
3
4
5
6
7
8
    def printButton_4Pressed(self):
        dict_ = {'za': za,                       # С переменными
                 'vo': vo,
                 'om': om,
                 'am': am,
                 'desc': desc,
                 }
        print(dict_)
, то выдает ошибку:
Python
1
Process finished with exit code 1073741845
А если вот так, то работает:
Python
1
2
3
4
5
6
7
8
    def printButton_4Pressed(self):
        dict_ = {'za': self.lineEdit.text(),        # Без переменных
                 'vo': self.lineEdit_2.text(),
                 'om': self.lineEdit_3.text(),
                 'am': self.lineEdit_4.text(),
                 'desc': self.textEdit.toPlainText()
                 }
        print(dict_)
Весь мой код (на сейчас):
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
from PyQt5 import uic, QtWidgets, QtGui
import json, codecs
 
Form, _ = uic.loadUiType("Test.ui")
 
global dict_
 
class Ui(QtWidgets.QDialog, Form):
    def __init__(self):
        super(Ui, self).__init__()
        self.setupUi(self)
        self.comboBox.setObjectName("comboBox") # выводим комбобокс
        options = ["", "Line1", "Line2"]   # в одну строку
        for option in options:
            self.comboBox.addItem(option)
        za = self.lineEdit.text()               # С переменными
        vo = self.lineEdit_2.text()
        self.lineEdit_2.editingFinished.connect(self.math_1)
        om = self.lineEdit_3.text()
        self.lineEdit_3.editingFinished.connect(self.math_2)
        am = self.lineEdit_4.text()
        desc = self.textEdit.toPlainText()
        v1 = self.pushButton.clicked.connect(self.printButtonPressed)
        v2 = self.pushButton_2.clicked.connect(self.printButton_2Pressed)
        v3 = self.pushButton_3.clicked.connect(self.printButton_3Pressed)
        self.pushButton_4.clicked.connect(self.printButton_4Pressed)
 
    def math_1(self):
        a = self.lineEdit_2.text()
        global a1
        a1 = int(a)
        print(a1)                     # Для контроля данных
 
    def math_2(self):
        b = self.lineEdit_3.text()
        b1 = int(b)
        print(b1)                     # Для контроля данных
        c = a1/b1
        print(round(c, 2))                      # Для контроля данных
        c1 = str(c)
        self.lineEdit_4.setText(c1)
 
    def find(self):
        # finding the content of current item in combo box
        con = self.comboBox.currentText()
        print('line', con)
 
    def printButtonPressed(self):  # обработка нажатия на кнопку 1
        v1 = 1
        print('1:1')
 
    def printButton_2Pressed(self):  # обработка нажатия на кнопку 2
        v2 = 10
        print('1:10')
 
    def printButton_3Pressed(self):  # обработка нажатия на кнопку 3
        v3 = 100
        print('1:100')
 
    def printButton_4Pressed(self):
        dict_ = {'za': self.lineEdit.text(),        # Без переменных
                 'vo': self.lineEdit_2.text(),
                 'om': self.lineEdit_3.text(),
                 'am': self.lineEdit_4.text(),
                 'desc': self.textEdit.toPlainText()
                 }
        print(dict_)
        with open(r'C:\333\data.json', 'wb') as f:
            json.dump(dict_, codecs.getwriter('utf-8')(f), ensure_ascii=False)
 
 
if  __name__== "__main__":
    import sys
 
    app = QtWidgets.QApplication(sys.argv)
    w = Ui()
    w.show()
    sys.exit(app.exec_())
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
11.07.2022, 22:32
Цитата Сообщение от MaxGal Посмотреть сообщение
Возник вопрос. Почему, если
Почитайте про область видимости переменных
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.07.2022, 22:32
Помогаю со студенческими работами здесь

Вычисления в полях формы
С этим разобрался . Есть еще пара вопросов : в форме 3 поля -- &quot;вес&quot; &quot;итого*3&quot; &quot;примечание&quot; (в котором есть несколько значений...

Установка значений в полях формы
Есть 2 таблицы основная(pole0,pole1,pole2....) и справочник(pole1,name), связанные по полям pole1-pole1, на форме есть выпадающий список на...

Ошибка в полях подчиненной формы
Здравствуйте! Помогите разрешить проблему, если это возможно. В подчиненной форме &quot;EmployeesAll subform&quot; при выборе фамилии...

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

Вопрос о ячейках листа и полях формы
Помогите, пожалуйста, с вопросом в теме http://www.relib.com/forums/thread891149.aspx. Там есть и код и пример!


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru