2015-10-22 4 views
0

Эта проблема, кажется, трудно дублировать - поскольку я могу правильно сделать это в более короткой программе. Я надеюсь, что это может быть какое-то руководство по поводу того, что может произойти неправильно. Я отправил версию, где она работает правильно:Tkinter bind inconsistency

import tkinter as tk 
from tkinter import * 
from tkinter import ttk 

class DIS(tk.Tk): 

    def __init__(self, *args, **kwargs): 

     tk.Tk.__init__(self, *args, **kwargs) 
     tk.Tk.wm_title(self, "program") 
     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight = 1) 
     container.grid_columnconfigure(0, weight = 1) 
     self.usernameVar = StringVar() 
     self.frames = {} 
     for F in (StartPage, contactQues, nowTry, next): 
      frame = F(container, self) 
      self.frames[F] = frame 
      frame.grid(row = 0, column = 0, sticky = "nsew") 
      self.show_frame(StartPage) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 


class StartPage(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 

     button2 = ttk.Button(self, text = "Here's a Button", command= lambda: controller.show_frame(nowTry)) 
     button2.pack() 


class nowTry(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 

     self.entry1 = Entry(self) 
     self.entry1.pack() 

     self.button1 = ttk.Button(self, text = "Yes", command = self.go) 
     self.button1.pack() 

     self.entry1.bind("<Return>", self.go) 

    def go(self, event=None): 
     print (self.entry1.get()) 
     self.controller.show_frame(contactQues) 


class contactQues(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 

     self.entry1 = Entry(self) 
     self.entry1.pack(pady=10, padx=10) 


     self.button1 = ttk.Button(self, text = "Submit", command= self.UsernameSubmit) 
     self.button1.pack() 

     self.entry1.bind("<Return>", self.UsernameSubmit) 

    def UsernameSubmit(self, event=None): 
     UsernameEntryGet = self.entry1.get() 
     self.controller.usernameVar.set(UsernameEntryGet) 
     self.controller.show_frame(next) 


class next(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 

     label = tk.Label(self, textvariable = self.controller.usernameVar) 
     label.pack() ###Label is posted with input correctly 

Проблема у меня с моей основной программы является то, что self.controller.usernameVar метка не размещать, как это делает в этом примере (ничего не отображается на всех), когда Для ввода ввода нажата клавиша Return. Однако, когда нажата кнопка submit с помощью мыши, метка отображается правильно.

Итак, учитывая эту информацию, мне кажется, что моя команда bind("<Enter>"... управляется неправильно. Я пробовал self.bind..., self.controller.bind..., self.entryX.bind... без успеха.

Любые идеи с этой структурой, что может быть неправильным?

+0

Прочтите https://stackoverflow.com/help/mcve и попробуйте сделать более короткую программу, иллюстрирующую проблему. –

+0

Вы действительно должны удалить все excesive вещи из кода, который вы публикуете, и убедиться, что код действительно запущен. Так или иначе. После добавления необходимого кода для получения окна, чтобы показать, что он запущен, и мне кажется, что он работает и показывает запись на ярлыке так, как должен. – anderswb

+0

Я пытался показать основную структуру в случае, если кто-то столкнулся с этим вопросом раньше. Я буду рассматривать пересмотр. –

ответ

0

Я считаю, что понял. Проблема заключалась в том, что в моей полной программе у меня было несколько команд bind. Пока я пытался решить эту проблему, у меня было несколько подсказок entry, связанных с controller, а другие - с самим entry (например, self.controller.bind в нескольких классах и self.entry.bind в других).

Я изменил их все на self.entry.bind, и он, по-видимому, исправил его - вот почему этот фрагмент кода работал должным образом.

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