Python: виджет Tkinter Entry не работает

from Tkinter import *
root = Tk()
ticker1 = StringVar()
ticker2 = StringVar()
root.title("Choose Companies")
Label(root,
          text = "Company No. 1",
          fg = "black",
          font ="Helvetica 16 italic").pack()
name = Entry(root,name = ticker1 ).pack()
Label(root,
          text = "Company No. 2",
          fg = "black",
          font ="Helvetica 16 italic").pack()
name1 = Entry(root,name1 = ticker2).pack()
root.mainloop()

Код не работает, выдает такую ​​ошибку:

исключения. TypeError: невозможно объединить объекты «str» и «экземпляр»

Формат для получения виджета ввода в графическом интерфейсе Python выглядит правильно.
Я использую Python 2.7 Windows 8.1


person polo mint    schedule 20.06.2015    source источник
comment
Я не нашел упоминания об именованном аргументе с именем name здесь effbot.org/tkinterbook/entry.htm   -  person xrisk    schedule 20.06.2015
comment
Чтобы получить текст из Entry, используйте get()   -  person xrisk    schedule 20.06.2015
comment
А для привязки StringVar используйте e = Entry(master, textvariable=v), где v — это StringVar, master — это экземпляр Tkinter.   -  person xrisk    schedule 20.06.2015
comment
Когда вы включаете сообщения об ошибках в свой вопрос, по крайней мере укажите, в какой строке они встречаются, или, что еще лучше, включите всю трассировку.   -  person martineau    schedule 20.06.2015
comment
Ооо черт возьми, это сработало, спасибо, чувак   -  person polo mint    schedule 20.06.2015
comment
@polomint, если сомневаетесь, прочитайте документы;)   -  person xrisk    schedule 20.06.2015
comment
Кстати, не связывайте управление геометрией цепочкой. Сделайте name = Entry(root,foo=bar) в одной строке, а затем name.pack() в следующей. В противном случае вы в конечном итоге сохраните None в переменной name, что бесполезно.   -  person TigerhawkT3    schedule 20.06.2015


Ответы (2)


Конструктор класса Entry не имеет ключевого параметра с именем name1, вы можете передать экземпляр StringVar параметру ключевого слова textvariable и получить текст, вызвав метод get() для этого экземпляра StringVar. В качестве альтернативы вы можете просто вызвать метод get() для самого экземпляра Entry.

Пример:

var = StringVar()
entry = Entry(root, textvariable=var)
entry.pack()

var.set('default value')
input = var.get()
person uname01    schedule 20.06.2015
comment
Вы должны упомянуть, что OP должен использовать textvariable для привязки StringVar - person xrisk; 20.06.2015

    from Tkinter import *
root = Tk()
ticker1 = StringVar()
ticker2 = StringVar()
root.title("Choose Companies")
Label(root,
          text = "Company No. 1",
          fg = "black",
          font ="Helvetica 16 italic").pack()
Entry(root,textvariable = ticker1 ).pack()
Label(root,
          text = "Company No. 2",
          fg = "black",
          font ="Helvetica 16 italic").pack()
Entry(root,textvariable = ticker2).pack()
root.mainloop()

Чувак, было плохой идеей назначать записи name и name1. Вместо этого вам нужно было добавить аргумент ключевого слова под названием «текстовая переменная», который является решением вашей проблемы.

person Adam    schedule 29.08.2020