2014-03-28 4 views
0

Как передать параметры функции с помощью кнопки?Python Tkinter - Передача значений с помощью кнопки

variable = str() 

def RandomFunction(variable): 
    print (variable) 

EntryBox = Entry(MainWindow, textvariable = variable).pack() 
FunctionCall = Button(MainWindow, text="Enter", command=RandomFunction(variable)) 

Кажется, что он просто ничего не печатает, когда нажата кнопка. Я искал вокруг, и кажется, что использование lambda может исправить его и разрешить (переменную) для передачи функции, но после эксперимента с lambda variable:variable я до сих пор не могу заставить его работать.

+0

Что такое переменная? Он не определен в этом коде. –

+0

строка, инициализированная в начале – user3091974

+0

Как насчет моего ответа? Я не думаю, что вы правильно использовали лямбда. –

ответ

1

Другие ответы здесь работают, но как много вещей в жизни, есть более чем один способ сделать то, что вы пытаетесь сделать.

Код в вашем вопросе фактически смешивает несколько методов получения данных из виджета Entry. Вы используете textvariable и лямбда, но вам нужен только один. Похоже, что лямбда была покрыта, так вот быстрый ответ о textvariable:

Во-первых, вам нужно, чтобы сделать вашу переменную типа Tkinter строки, как это:

variable = StringVar() 

Ваша запись виджет нормально, это подключен к StringVar(). Однако ваша кнопка не нуждается в лямбда, потому что вам не нужно передавать аргумент вашему RandomFunction().

FunctionCall = Button(MainWindow, text='Enter', command=RandomFunction).pack() 

Наконец, ваша функция нуждается в небольшой переделки, потому что не принимает аргумент больше, это просто будет использовать метод .get() на вашем STRINGVAR() всякий раз, когда это называется:

def RandomFunction(): 
    print(variable.get()) 

Вы можете узнать больше о StringVar() здесь: http://effbot.org/tkinterbook/variable.htm

+0

Я также пробовал этот метод, я получаю сообщение об ошибке: Ошибка атрибута: объект 'str' не имеет атрибута 'get'. – user3091974

+0

Попробуйте удалить '.get()' then. Иногда требуется простая отладка. – atlasologist

+0

, но тогда я не могу получить доступ к переменной внутри функции – user3091974

1

Использование lambda создать функцию, которая вызывает функцию с аргументом в порядке (до тех пор, как вы делаете это правильно):

FunctionCall = Button(MainWindow, text="Enter", command=lambda: RandomFunction(EntryBox.get)) 

Python будет доволен этим, потому что lambda не принимать какие-либо аргументы.

+0

Я пробовал это, и, хотя он не дает мне никаких ошибок, все еще кажется, что он печатает пустым? – user3091974

+0

Ну, конечно, этого не происходит, ничего не возникает, поскольку вы не задали свою строку фактическим значением. Установите переменную в нечто вроде «Hello, world!» И посмотрите, что произойдет. –

+0

Виджет ввода - это то, что позволяет вводить текст, а затем присваивается переменной. Я ввел текст в поле ввода, и он все еще не печатается при нажатии кнопки. – user3091974

1

Вы используете .get() для получения содержимого записи. На странице effbot http://effbot.org/tkinterbook/entry.htm

from Tkinter import * 

master = Tk() 

e = Entry(master) 
e.pack() 
e.focus_set() 

def callback(): 
    print e.get() 

b = Button(master, text="get", width=10, command=callback) 
b.pack() 

master.mainloop() 
+0

Это тоже работает, спасибо. – user3091974

Смежные вопросы