Найти - Пользователи
Полная версия: Помогите с решением плиз!
Начало » Центр помощи » Помогите с решением плиз!
1 2
fisherand
Добрый день.
Только начал изучать Питон и в процессе обучения застрял на такой задаче.
Есть однострочное поле 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
fisherand
Цель - наполнять список значениями через форму
в вашем коде нет ни одного списка
fisherand
FishHook
в вашем коде нет ни одного списка
Спасибо.
Соответственно мне надо добавить список. Не ругайте сильно (только месяц как учусь), но я не могу понять куда его добавлять.
В конце кода, допустим:
list=[]
list.append()
- где взять значение для добавления в список?
Думал забрать его из функции add или из переменной z.

Спасибо.
FishHook
fisherand
Думал забрать его из функции add или из переменной z.
Ну и что вас побудило изменить решение?
fisherand
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
Нутром понимаю, что где-то и в функции нахимичил, но решение еще не родилось.
fisherand
Вот добавил список в код. Что делаю не верно, ткните носом, буду изучать.

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)
FishHook
На будущее, выкладывайте ошибку сразу. Не заставляйте помогающих вам гадать и думать, а что ему собственно надо?

По сабжу: add - это функция коллбэк, ткинтер передаёт в неё параметры события, а у вас она не принимает параметров.

def add(*args, **kwargs):
    x=str(a.get())
    return x
fisherand
Да далеко послали.. Пошел курить функции.
Спасибо, попытаюсь разобраться.
fisherand
Добрый день. Перечитал функции, но увы не пришло в голову как увязать значение с получаемой ячейки и списком в который ее надо добавить. Чуть изменил код но это не суть, подскажите, что надо сделать чтоб значение добавилось в список. Через глобальную переменную решил, но это не “феншуйно”. Сам код планируется использоваться для интерактивного наполнения справочника сотрудников имя/фамилия/отчество и дальше доп.реквизиты.
Тут же не надо функции передавать аргумент? мы же планируем получить значение в самой функции. Объясните чайнику на пальцах, что не так… ПЛИЗ
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'
4kpt_III
Объясняю.
1. Анонимные функции для этого придумали.

def add(a):
    print(a.get())
#
but.bind('<Button-1>', lambda event: add(a))

Теперь по коду.
1. Не используйте from tkinter import *
2. Почитайте pep8
3. Лучше использовать ButtonRelaese - убережет от многих проблем.
4. Эти строчки отработают, когда закроется окно приложения

a=[]
a.append(add())  # как по мне должно передать значение add  и добавить к спискуб а НЕТ
print(a)

Что естественно вызовет ошибку, так как “а” становиться списком, у которого нет метода get…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB