У меня была та же проблема для моего приложения kivy, и я нашел решение ad hoc. Ошибка возникает из строки «import kivy», поэтому раскомментируйте ее и следующую строку «kivy.require ('1.0.6')». Там строки не нужны, если у вашего киви есть правильная версия.
Как сказал phydeaux, вы можете сделать это, просто передав переменные в качестве параметров.
полный исправленный код, показанный ниже:
from tkinter import *
def print_name(entry_location):
print(entry_location.get())
def main(main_window, entry_location):
main_window =Tk()
Button(main_window, text="Print Name",command=print_name) .pack()
entry_location = Entry(main_window)
entry_location.pack()
main_window.mainloop()
main(main_window, entry_location)
В вашем примере вы можете устранить глобальные переменные, зарегистрировав лямбда-функцию для кнопки; эта лямбда-функция собирает значение te в записи и передает его в качестве параметра print_name
.
import tkinter as tk
def print_name(text=''): # <- now receives a value as parameter
print(text)
def main():
main_window = tk.Tk()
entry_location = tk.Entry(main_window)
tk.Button(main_window, text="Print Name", command=lambda: print_name(entry_location.get())).pack()
entry_location.pack()
main_window.mainloop()
main()
Это отвечает частному случаю вашего примера; это не общий ответ на полное уничтожение глобалов. Альтернативные подходы могут заключаться в размещении переменных, необходимых глобально, в словаре или списке, что позволяет их модифицировать в локальных пространствах, но, в конце концов, это может стать более сложным, чем использование надлежащего класса.
Как предполагает @AndrasDeak, лучше избегать импорта звездочек.