2014-02-21 3 views
0

Pastebin - My Full CodePython 3.x Tkinter, проблема с полем ввода?

У меня проблема с моей программой, которая влияет на мои поля ввода.

С моим вводом пароля он отлично работает, вход сохраняется в StringVar и может использоваться для проверки правильности ввода. Когда пользователь вводит адрес электронной почты или новый пароль на странице настроек администратора, он не работает, текстовая переменная всегда равна нулю.

Если вы могли бы помочь, это было бы высоко оценено, поскольку это идет к важной квалификации.

Проблемные области:

Изменение функции

#Function that changes the system email address 
def ChangeEmail(page): 

    global field_ChangeEmail 
    newEmail = field_ChangeEmail.get() 

    field_ChangeEmail.set('') 

    print(newEmail) 

    settingsDB = sqlite3.connect('Settings.db') 

    action = ("UPDATE ADMIN_SETTINGS set SYSTEM_EMAIL = '" + newEmail + "' where ID=1") 

    settingsDB.execute(action) 
    settingsDB.commit() 

    settingsDB.close() 

Поле ввода

global field_ChangeEmail 
    entry_ChangeEmail = tk.Entry(page, textvariable = field_ChangeEmail, justify = CENTER, fg = settings_EntryFontColour, font = settings_EntryFont) 
    widthRatio = settings_AS_Column03Width 
    heightRatio = settings_AS_RowHeight 
    relativeX = settings_AS_Column03RelX 
    relativeY = settings_AS_Row01RelY - 0.0009 
    entry_ChangeEmail.place(width=screenWidth*widthRatio, height=screenHeight*heightRatio, relx=relativeX, rely=relativeY, x=-((screenWidth*widthRatio)*0.5), y=-((screenHeight*heightRatio)*0.5)) 
+1

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

+0

Мы не можем ожидать, что прочитаем все 893 строки кода, чтобы найти ошибку для вас, особенно если этот код не будет работать точно так же, как и в сообщении. –

+0

Я обновил сообщение с двумя областями, которые задействованы. – RossGosling

ответ

0

Там нет ничего плохого с кодом вы в курсе, хотя использование вами place и переменные для проклейки очень , очень странно. Я настоятельно рекомендую вам узнать о пакете или сетке, это значительно упростит ваш графический интерфейс и будет поддерживать его с течением времени. Место никогда не должно использоваться, за исключением случаев, когда ни одна из двух других не будет работать.

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

Если текстовая переменная получает значение null (None?), Это происходит в какой-либо другой части вашего кода.

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