Форум сайта python.su
Добрый день.
Только начал изучать Питон и в процессе обучения застрял на такой задаче.
Есть однострочное поле Entry (a),ввожу в него текст и хочу чтоб его добавило к внешнему списку (z) по нажатию кнопки (but) в виде строки. Цель - наполнять список значениями через форму. За рание благодарю.
from tkinter import * def add(): x=str(a.get('1.0',END)) return x root=Tk() a=Entry(root,width=50) a.pack() but=Button(root,width=10,height=10,bg='red', text='PUSH') but.bind('<Button-1>',add) but.pack() root.mainloop() z=add()
Отредактировано FishHook (Сен. 9, 2015 09:59:15)
Офлайн
fisherandв вашем коде нет ни одного списка
Цель - наполнять список значениями через форму
Офлайн
FishHookСпасибо.
в вашем коде нет ни одного списка
list=[] list.append()
Отредактировано fisherand (Сен. 9, 2015 10:30:31)
Офлайн
fisherandНу и что вас побудило изменить решение?
Думал забрать его из функции add или из переменной z.
Офлайн
FishHookРешение не поменял. Меня замучила ошибка при исполнении
Ну и что вас побудило изменить решение?
Exception in Tkinter callback Traceback (most recent call last): File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__ return self.func(*args) TypeError: add() takes 0 positional arguments but 1 was given
Офлайн
Вот добавил список в код. Что делаю не верно, ткните носом, буду изучать.
from tkinter import * def add(): x=str(a.get(1.0,END)) return x root=Tk() a=Entry(root,width=50) a.pack() but=Button(root,width=10,height=10,bg='red', text='PUSH') but.bind('<Button-1>',add) but.pack() root.mainloop() z=add() lst=[] lst.append(z) # или надо lst=lst.append(z) print(z,lst)
Отредактировано fisherand (Сен. 9, 2015 11:21:49)
Офлайн
На будущее, выкладывайте ошибку сразу. Не заставляйте помогающих вам гадать и думать, а что ему собственно надо?
По сабжу: add - это функция коллбэк, ткинтер передаёт в неё параметры события, а у вас она не принимает параметров.
def add(*args, **kwargs): x=str(a.get()) return x
Офлайн
Да далеко послали.. Пошел курить функции.
Спасибо, попытаюсь разобраться.
Офлайн
Добрый день. Перечитал функции, но увы не пришло в голову как увязать значение с получаемой ячейки и списком в который ее надо добавить. Чуть изменил код но это не суть, подскажите, что надо сделать чтоб значение добавилось в список. Через глобальную переменную решил, но это не “феншуйно”. Сам код планируется использоваться для интерактивного наполнения справочника сотрудников имя/фамилия/отчество и дальше доп.реквизиты.
Тут же не надо функции передавать аргумент? мы же планируем получить значение в самой функции. Объясните чайнику на пальцах, что не так… ПЛИЗ
from tkinter import * def add (): #читает значение из ячейки (а) c=a.get() #получение значения из ячейки (а) return c # возврат значения программе... ЧТО ВОЗВРАЩАЕТ? Строку- правильно ли я думаю? def by(y): root.destroy() root=Tk() a=Entry(root,width=50) a.pack() but=Button(root,width=5,height=5,bg='red',fg='white', text='Push') but.bind('<Button-1>',add) but.pack(side='left') but=Button(root,width=5,height=5,bg='red',fg='white', text='By!!!') but.bind('<Button-1>',by) but.pack(side='right') root.mainloop() a=[] a.append(add()) # как по мне должно передать значение add и добавить к спискуб а НЕТ print(a)
Exception in Tkinter callback Traceback (most recent call last): File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__ return self.func(*args) TypeError: add() takes 0 positional arguments but 1 was given Traceback (most recent call last): File "C:\Python34\Test_pro\from_glob.py", line 18, in <module> a.append(add()) # как по мне должно передать значение add и добавить к спискуб а НЕТ File "C:\Python34\Test_pro\from_glob.py", line 3, in add c=a.get() #получение значения из строки (а) AttributeError: 'list' object has no attribute 'get'
Отредактировано fisherand (Сен. 14, 2015 15:55:17)
Офлайн
Объясняю.
1. Анонимные функции для этого придумали.
def add(a): print(a.get()) # but.bind('<Button-1>', lambda event: add(a))
a=[] a.append(add()) # как по мне должно передать значение add и добавить к спискуб а НЕТ print(a)
Отредактировано 4kpt_III (Сен. 14, 2015 16:09:50)
Офлайн