Вопрос:
Это то, что я пытался сделать до сих пор, чтобы ввести пользователя:
master = Tk() master.title(‘Title’) v = StringVar() L1 = Label(master, text = ‘Name’) L1.pack(side = LEFT) E1 = Entry(master, textvariable = v, bd = 5) E1.pack(side = RIGHT) def userinput(): a = raw_input(v.get()) print a b = Button(master, text = ‘Submit’, command = userinput) b.pack(side = BOTTOM) master.mainloop()
Реальный вопрос: как я могу хранить v.get() raw_input в переменной вне функции? Спасибо!
Ответ №1
Вы можете сделать глобальную переменную для хранения ввода:
inp = None
а затем обновите эту переменную:
def userinput(): global inp a = raw_input(v.get()) print a inp = a
Итак, ваш код будет выглядеть так:
master = Tk() master.title(‘Title’) v = StringVar() # Variable to hold the input inp = None L1 = Label(master, text = ‘Name’) L1.pack(side = LEFT) E1 = Entry(master, textvariable = v, bd = 5) E1.pack(side = RIGHT) def userinput(): # Declare ‘inp’ to be global global inp a = raw_input(v.get()) print a # Update the variable inp = a b = Button(master, text = ‘Submit’, command = userinput) b.pack(side = BOTTOM) master.mainloop()
В приведенном выше коде inp всегда будет новой копией ввода, которую вы можете использовать в другом месте в коде.
Однако, возможно, стоит рассмотреть вопрос о том, как сделать свой код классом. Таким образом, вы можете иметь атрибут класса с именем self.inp и вам не придется делать global inp.
Ответ №2
Как говорят другие, – используйте globe
Пример использования класса
from Tkinter import * class MainWindow(): def __init__(self, master): self.master = master self.master.title(‘Title’) self.v = StringVar() self.L1 = Label(self.master, text = ‘Name’) self.L1.pack(side = LEFT) self.E1 = Entry(self.master, textvariable = self.v, bd = 5) self.E1.pack(side = RIGHT) self.B1 = Button(self.master, text = ‘Submit’, command = self.userinput) self.B1.pack(side = BOTTOM) self.B2 = Button(self.master, text = ‘Print’, command = self.print_external_variable) self.B2.pack(side = TOP) #—————— def userinput(self): global external_variable external_variable = raw_input(self.v.get()) #external_variable = self.v.get() print «inside — userinput:», external_variable #—————— def print_external_variable(self): # you don’t need global if you don’t change external_variable print «inside — print:», external_variable #———————————————————————- external_variable = ‘- none -‘ print «before run:», external_variable master = Tk() MainWindow(master) master.mainloop() print «after run:», external_variable Ответ №3
Просто заставьте его вернуть пользовательский ввод
def userinput(): a = raw_input(v.get()) return a
Затем, когда вы это называете, вы можете это сделать:
myvar=userinput()
Теперь myvar содержит значение пользовательского ввода.