Невозможно сохранить переменную вне определения - PullRequest
0 голосов
/ 16 июня 2019

Внутри моей программы есть определение, которое открывает окно (это окно - код ниже). В этом окне я хочу иметь возможность устанавливать переменную с помощью поля ввода, а затем вне окна иметь возможность вызывать эту переменнуюс заданным целым числом.

Для проверки моего кода есть кнопка подтверждения и принятия.Если я могу набрать номер, нажмите «Принять», затем нажмите «Тест», он должен напечатать этот номер.в настоящее время печатает класс int.

from tkinter import *
fuel_stored = int

def Accept():
    Varible = number1.get()
    fuel_stored = Variable
    print (Varible)

def PrintFuel():
    print (fuel_stored)

root = Tk()
root.geometry=("100x100+100+50")

number1 = Entry(root, bg="white")
number1.pack()
number1.focus_force()


nameButton = Button(root, text="Accept", command=Accept)
nameButton.pack(side=BOTTOM, anchor=S)
nameButton = Button(root, text="Test", command=PrintFuel)
nameButton.pack(side=BOTTOM, anchor=S)


root.mainloop()

1 Ответ

2 голосов
/ 16 июня 2019

Есть некоторые "проблемы" с вашим кодом.

Опечатка

См. Вашу функцию Accept().В первой и третьей строке отсутствует a.

Разница между global и local переменными

Ваш сценарий использует глобальный объект fuel_stored, объявленный в строке 2.Ваш Accept() объявляет еще один локальный fuel_stored объект, отличный от первого.Функция или метод в Python всегда (неявно) используют локальную версию объекта.Решение состоит в том, чтобы заставить вашу функцию использовать глобальный объект с ключевым словом global следующим образом

def Accept():
    Variable = number1.get()
    print (Variable)
    global fuel_stored
    fuel_stored = Variable

См. Также Использование глобальных переменных в функции для этого.

Другое решение с переменной содержимого

Здесь я предлагаю вам совершенно другое решение с использованием переменной содержимого.Объект Entry() знает использование fuel_stored напрямую.См. Параметр textvariable= в конструкторе Entry.Я также немного свернул твой код.

#!/usr/bin/env python3
from tkinter import *

def PrintFuel():
    print (fuel_stored.get())

root = Tk()

# Need to be instanciated it after Tk().
fuel_stored = StringVar()

number1 = Entry(root, textvariable=fuel_stored)
number1.pack()

nameButton = Button(root, text="Test", command=PrintFuel)
nameButton.pack()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...