Эта проблема, кажется, трудно дублировать - поскольку я могу правильно сделать это в более короткой программе. Я надеюсь, что это может быть какое-то руководство по поводу того, что может произойти неправильно. Я отправил версию, где она работает правильно: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...
без успеха.
Любые идеи с этой структурой, что может быть неправильным?
Прочтите https://stackoverflow.com/help/mcve и попробуйте сделать более короткую программу, иллюстрирующую проблему. –
Вы действительно должны удалить все excesive вещи из кода, который вы публикуете, и убедиться, что код действительно запущен. Так или иначе. После добавления необходимого кода для получения окна, чтобы показать, что он запущен, и мне кажется, что он работает и показывает запись на ярлыке так, как должен. – anderswb
Я пытался показать основную структуру в случае, если кто-то столкнулся с этим вопросом раньше. Я буду рассматривать пересмотр. –