Как сделать обновление переменной по нажатию кнопки?

Есть функция OpenWin1(), которая открывает окно с настройками, куда ты вводишь координаты, размеры и тд (пока сделал только координаты).
По нажатию создаётся в другом файле строки уже с настройками.

Всё работает, всё нормально, но переменные не обновляются, принимая текст по умолчанию (pos Y, pos X).

Надо сделать так, чтобы при нажатии кнопки "Update" переменная обновлялась.

import tkinter as tk
from tkinter import ttk
import subprocess
import time
from tkinter import *

root = Tk()
root.title('123')
root.geometry('400x600')
root.resizable(width=False, height=False)

font = ('intro.otf', 12)

def Insert(file_name, text_line, text_to_add):
    with open(file_name, 'r', encoding='utf-8') as read_file:
        text = read_file.readlines()
        text.insert(text_line, text_to_add+"\n")
    with open(file_name, 'w', encoding='utf-8') as write_file:
        for i in text:
            write_file.write(i)
    with open(r"game.py", 'r') as fp:
        for count, line in enumerate(fp):
            pass

def OpenWin1():
    Win1 = Tk()
    Win1.title('Setup gameobject')
    Win1.geometry('220x200')
    Win1.resizable(width=False,height=False)
    WB1 = Button(Win1,text='Add gameobject',command=lambda:Insert("game.py", 24, f'    pygame.draw.rect(screen, WHITE, ({Xprint}, {Yprint}, 75, 75))'), font=font)
    WB1.place(y=10,x=40)
    #Yprint
    info_Tf = Entry(Win1)
    info_Tf.insert(END, 'Pos Y')
    info_Tf.place(y=120,x=40)
    #Xprint
    info_Tf2 = Entry(Win1)
    info_Tf2.insert(END, 'Pos X')
    info_Tf2.place(y=100,x=40)
    Yprint = info_Tf.get()
    Xprint = info_Tf2.get()
    Win1.mainloop()

btn1 = Button(root, text='Add Rect(Game Object)', command=lambda:OpenWin1())
btn1.place(x=0, y=0)

root.mainloop()

Мне нужно, чтобы написанное в полях для ввода записывалось в переменную. Так и происходит, но оно не обновляется, а записывается только 1 раз в начале.

ВАЖНО! Если вы хотите запустить этот код, создайте файл game.py в той же папке где и этот код.


Ответы (1 шт):

Автор решения: S. Nick

Как вариант:

from tkinter import *


root = Tk()
root.title('123')
root.geometry('400x600')
root.resizable(width=False, height=False)

font = ('intro.otf', 12)

# -----------------------------> vvvvvvv  vvvvvvvv <-------------------------
def Insert(file_name, text_line, info_Tf, info_Tf2):           # text_to_add):
    text_to_add = f'    pygame.draw.rect(screen, WHITE, ({info_Tf2.get()}, '\
                  f'{info_Tf.get()}, 75, 75))'
    print(f'{text_to_add}\n')

    with open(file_name, 'r', encoding='utf-8') as read_file:
        text = read_file.readlines()
        text.insert(text_line, text_to_add + "\n")
    with open(file_name, 'w', encoding='utf-8') as write_file:
        for i in text:
            write_file.write(i)
    with open(r"game.py", 'r') as fp:
        for count, line in enumerate(fp):
            pass

def openWin1():
    win1 = Tk()
    win1.title('Setup gameobject')
    win1.geometry('220x200')
    win1.resizable(width=False, height=False)

    wB1 = Button(win1,
        text='Add gameobject',
#        command=lambda: Insert("game.py", 24, 
#            f'    pygame.draw.rect(screen, WHITE, ({Xprint}, {Yprint}, 75, 75))'), 
# -------------------------------------------> vvvvvvv  vvvvvvvv <---------------- # +++
        command=lambda: Insert("game.py", 24,  info_Tf, info_Tf2),
        font=font)
    wB1.place(y=10, x=40)

    #Yprint
    info_Tf = Entry(win1)
    info_Tf.insert(END, 'Pos Y')
    info_Tf.place(y=120, x=40)
    #Xprint
    info_Tf2 = Entry(win1)
    info_Tf2.insert(END, 'Pos X')
    info_Tf2.place(y=100, x=40)
    Yprint = info_Tf.get()
    Xprint = info_Tf2.get()
#?   Win1.mainloop()


btn1 = Button(root, text='Add Rect(Game Object)', 
#?   command=lambda: OpenWin1())
    command=openWin1)
btn1.place(x=0, y=0)

root.mainloop()

введите сюда описание изображения

→ Ссылка