Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 9, 2015 09:56:25

fisherand
Зарегистрирован: 2015-09-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

Добрый день.
Только начал изучать Питон и в процессе обучения застрял на такой задаче.
Есть однострочное поле 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)

Офлайн

#2 Сен. 9, 2015 10:00:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

fisherand
Цель - наполнять список значениями через форму
в вашем коде нет ни одного списка



Офлайн

#3 Сен. 9, 2015 10:29:02

fisherand
Зарегистрирован: 2015-09-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

FishHook
в вашем коде нет ни одного списка
Спасибо.
Соответственно мне надо добавить список. Не ругайте сильно (только месяц как учусь), но я не могу понять куда его добавлять.
В конце кода, допустим:
list=[]
list.append()
- где взять значение для добавления в список?
Думал забрать его из функции add или из переменной z.

Спасибо.

Отредактировано fisherand (Сен. 9, 2015 10:30:31)

Офлайн

#4 Сен. 9, 2015 11:05:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

fisherand
Думал забрать его из функции add или из переменной z.
Ну и что вас побудило изменить решение?



Офлайн

#5 Сен. 9, 2015 11:11:43

fisherand
Зарегистрирован: 2015-09-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

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
Нутром понимаю, что где-то и в функции нахимичил, но решение еще не родилось.

Офлайн

#6 Сен. 9, 2015 11:14:51

fisherand
Зарегистрирован: 2015-09-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

Вот добавил список в код. Что делаю не верно, ткните носом, буду изучать.

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)

Офлайн

#7 Сен. 9, 2015 11:47:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

На будущее, выкладывайте ошибку сразу. Не заставляйте помогающих вам гадать и думать, а что ему собственно надо?

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

def add(*args, **kwargs):
    x=str(a.get())
    return x



Офлайн

#8 Сен. 9, 2015 11:58:41

fisherand
Зарегистрирован: 2015-09-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

Да далеко послали.. Пошел курить функции.
Спасибо, попытаюсь разобраться.

Офлайн

#9 Сен. 14, 2015 15:40:00

fisherand
Зарегистрирован: 2015-09-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

Добрый день. Перечитал функции, но увы не пришло в голову как увязать значение с получаемой ячейки и списком в который ее надо добавить. Чуть изменил код но это не суть, подскажите, что надо сделать чтоб значение добавилось в список. Через глобальную переменную решил, но это не “феншуйно”. Сам код планируется использоваться для интерактивного наполнения справочника сотрудников имя/фамилия/отчество и дальше доп.реквизиты.
Тут же не надо функции передавать аргумент? мы же планируем получить значение в самой функции. Объясните чайнику на пальцах, что не так… ПЛИЗ

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)

Офлайн

#10 Сен. 14, 2015 16:09:29

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Помогите с решением плиз!

Объясняю.
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…

Отредактировано 4kpt_III (Сен. 14, 2015 16:09:50)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version