2014-12-15 1 views
0

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

Вот проблема:

mEntry1 = Entry(mGui, textvariable = ment).grid(column = 0, row = 2, sticky = W) 
mEntry2 = Entry(mGui, textvariable = ment).grid(column = 0, row = 4, sticky = W) 

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

+0

Вам действительно нужно использовать текстовые переменные, или вы думаете, что вам нужно? Это нормально для _not_ использования текстовых переменных, если вам не нужны их особые поведения (например, трассировка или привязка двух виджетов вместе). –

ответ

3

Две проблемы:

  • если назначить виджет и grid его на той же строке, переменная будет None, потому что это то grid возвращается. Назначение и сетка на отдельных строках.
  • Каждая запись должна иметь отдельную текстовую переменную.

mEntry1 = Entry(mGui, textvariable = ment1) 
mEntry2 = Entry(mGui, textvariable = ment2) 
mEntry1.grid(column = 0, row = 2, sticky = W) 
mEntry2.grid(column = 0, row = 4, sticky = W) 

Bonus наконечник стиль: попытаться выбрать имена переменных, которые отражают назначение элементов пользовательского интерфейса. Пример:

username_entry = Entry(mGui, textvariable = username_var) 
password_entry = Entry(mGui, textvariable = password_var) 
username_entry.grid(column = 0, row = 2, sticky = W) 
password_entry.grid(column = 0, row = 4, sticky = W) 

Это облегчит определение того, какие переменные что-то делают. Когда вы вернетесь через шесть месяцев, чтобы добавить новую функциональность, вы поблагодарите свою прошлую «я», чтобы сделать все понятным.

+0

Благодарим вас за помощь в разделении грида и имени переменной, но у меня все еще есть проблема: для username_var придумано ошибка, указывающая «username_var», не определена. Я вызвал функцию, которая получает username_var из записи, вот ее часть, и это ошибка: 'def mfetchinfo(): mtext1 = username_var.get()' – Jonathan

+0

Если вы создаете 'username_var' в одном функция и пытается получить доступ к ней в другой функции, она не будет видна; переменная может видеть только первая функция. Вы можете сделать 'username_var' глобальную переменную; или вы можете создать его вне любой функции, чтобы он был видимым в любом месте; или вы можете реорганизовать свою программу, так что все материалы GUI находятся в одном классе MyApplication, а затем все методы этого класса могут совместно использовать переменные типа 'self.username_var'. – Kevin

+0

Я попытался сделать их глобальными переменными, но он все еще не работал, и я недостаточно опыт для создания класса. – Jonathan

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