Я только изучаю Python
Ниже не полный код, а лишь объяснение логики работы
import json, time
from threading import Thread
sleep = time.sleep
#Словари хранятся в файле json
gui_data = {
'step':1
}
counter_data = {
'count':0
}
###
def add():
with open ('gui_data.json', 'r')
gui_data= json.load(f)
f.close()
print('Введите на сколько вы хотите увеличить шаг счетчика')
gui_data['step'] += input()
with open('gui_data.json', 'w+', encoding='utf-8') as f:
f.write(json.dumps(gui_data, sort_keys=False, indent=4, ensure_ascii=False, separators=(',', ': ')))
f.close()
def counter():
while True:
with open ('gui_data.json', 'r')
gui_data= json.load(f)
f.close()
with open ('counter_data.json', 'r')
counter_data= json.load(f)
f.close()
counter_data['count'] += gui_data.json['step']
print(counter_data['count'])
with open('counter_data.json', 'w+', encoding='utf-8') as f:
f.write(json.dumps(counter_data, sort_keys=False, indent=4, ensure_ascii=False, separators=(',', ': ')))
f.close()
sleep(1)
th_1, th_2 = Thread(target = gui_func), Thread(target = counter)
if __name__ == '__main__':
th_1.start(), th_2.start()
th_1.join(), th_2.join()
Соответственно в таком виде все работает нормально
Счётчик каждую секунду считывает из файла 'counter_data.json' переменную 'count'
Из файла 'gui_data.json' переменную 'step'
И выполняет сложение после чего записывает новое значение в файл 'counter_data.json'
И выводит это в GUI. Пользователь может увеличить значение 'step'
Я пытаюсь сделать так, чтобы увеличение значения 'step' имело стоимость например x2 от вводимого значения и
Вычиталось из текущего счетчика 'count'
То есть допустим
'count' = 1000
'step' = 100
Пользователь вводит '100' (100 x 2 вычитается)
'count' = 800
'step' = 200
Соответственно если я описываю это в def add():
То при записи в файл 'counter_data.json' может вылететь ошибка,
Потому что с файлом работает в это время def counter():
Может быть одна функция должна передавать в другую,
Что в текущем цикле нужно сделать сложение по старому 'step' и из 'count' вычесть 200
Но я не знаю как это сделать