Обзор
РЕДАКТИРОВАТЬ: ИЗМЕНЕНО ПОСЛЕДУЮЩИЕ @ IjonTichy's ОТВЕТ
Я пытаюсь импортировать две переменные в файлы. У меня есть файл GUI с использованием tkinter и еще один файл, в котором хранится ряд переменных. Проблема в том, что файл GUI имеет поле tk.Entry
, поэтому значение переменной - dynamic c и изменяется в зависимости от того, что вводится. Я бы предпочел не использовать здесь кнопку. Я использую объект tk.StringVar
для хранения данных (возможно, более понятный в приведенном ниже коде.
Вторая переменная - это просто число с плавающей запятой, основанное на вычислении, которое довольно легко назначить там. У меня возникла проблема этому файлу требуется значение tk.StringVar
для выполнения вычислений.
То, что я пробовал
Итак, сначала я попытался просто взять переменные из каждого файла, используя import [filename]
а затем [filename].[variable]
, когда мне нужно было его вызвать. Как и ожидалось, это вызвало ошибку из-за циклического импорта, что имеет смысл.
Впоследствии я попытался сбросить все эти данные в файл конфигурации и позволить обоим файлам вытащить из этого третьего файла, но это также приводит к тому же.
Код
vitals.py
from datetime import date
from decimal import Decimal
birth = date(1992, 6, 22)
today = date.today()
age = today.year - birth.year - ((today.month, today.day) < (birth.month, birth.day))
weight = 0
height = 177.5
activity = 1.2
#tdee = bmr * activity
def bmr(weight, height, age):
return Decimal(((10 * float(weight)) + (6.25 * height) - (5 * age) + 5))
GUI .py
import tkinter as tk
import config
app = tk.Tk()
defaultColour = "beige"
mainFrame = tk.Frame(width=200, height=200, bg=defaultColour)
mainFrame.pack(fill=tk.BOTH, side=tk.LEFT, expand=True)
weightLabel = tk.Label(master=mainFrame,text='weight', bg=defaultColour)
weightLabel.pack()
weightVar = tk.DoubleVar() #NEW LINE
weightEntry = tk.Entry(mainFrame, textvariable=weightVar)
weightEntry.pack()
weightEntry.focus_set()
vitals.weight = weightVar.get()
print(vitals.bmr(vitals.weight, vitals.height, vitals.age))
ageLabel = tk.Label(master=mainFrame,text='age: ' + str(config.age), bg=defaultColour)
ageLabel.pack()
app.bind("<Escape>", lambda e: app.destroy())
app.mainloop()
Вопрос
Я немного не понимаю, как мне это правильно структурировать. сможет ли кто-нибудь сказать мне, в чем я ошибаюсь? Или вы могли бы указать я в направлении некоторых ресурсов, которые учат хорошей структуре кодирования. Я пишу приложение впервые, поэтому извиняюсь за бессмысленность этого вопроса.
Большое спасибо.