PYTHON TKINTER > e = Entry() > e.bind('<ENTER>', 函数)

PYTHON TKINTER > e = Entry() > e.bind('<ENTER>', function)

我还不能在问题帖子中添加图片。

问题如下:

我的应用目前使用 window 编码为 class。

我的最终目标是在输入字母和数字的同时按回车键进入条目小部件并按回车键,然后该函数将更新与我的主要标签相关的文本 window。

详细说明如下:

我不知道如何创建和输入然后绑定回车键,这样当我 运行 我的应用程序时,我可以点击条目,输入一个值然后按回车键。

我看到很多按钮参考,我可以让按钮工作,但我正在尝试学习如何做事,不想在这种情况下依赖按钮。

我在其他一些帖子中看到,如果您使用入口对象调用 .get,python 代码将执行它并继续。我在按回车键时要调用的函数中使用打印语句进行了测试,在我在条目小部件中键入任何内容之前,打印语句出现在终端中。然后我尝试输入并按回车键,但什么也没有发生。

我应该放弃绑定 ENTER 键并坚持使用 tkinter 中的按钮作为规则,还是有正确的方法来做到这一点?在我的代码示例中,您会看到 up_R 是我在按 Enter 时尝试执行的函数。如果我使用 up_R(),它会立即执行。如果我使用 up_R,则会出现 TCL 错误。

位于下方的特定部分代码:

def up_R():
    print('Makes it here')
    self.R.update_disp(self.e.get())
            
self.e.bind('<ENTER>',up_R)

如果需要帮助,完整代码如下:

#NOAA SPACE WEATHER CONDITIONS

from tkinter import *


class window:
    
    def __init__(self):
        
        #main window
        self.window = Tk()
        self.window.title('NOAA SPACE WEATHER CONDITIONS')
        self.window.geometry('800x600')
        
        #window organization
        self.window.grid_rowconfigure(0, weight = 1)
        self.window.grid_rowconfigure(1, weight = 1)
        
        self.window.grid_columnconfigure(0, weight = 1)
        self.window.grid_columnconfigure(1, weight = 1)
        
        #temp entry frame
        self.e = Entry(self.window)
        self.e.grid(row = 1, column = 0, sticky=N)
        self.e.insert(END, 'R entry')              
        
        
        #init class R
        self.R = R()
        
        #init class S
        self.S = S()
        
        #init class g
        self.G = G()
        
        #frame for RSG
        self.frame = Frame(self.window)
        self.frame.grid(row = 0, column = 0, columnspan = 2, padx=10, pady=10)
        
        #disp class R
        self.rf = Frame(self.frame, highlightbackground='black', highlightcolor='black', highlightthickness=1)
        self.rf.pack(side = LEFT)
        
        self.rl = Label(self.rf, text = self.R.dkey, bg='#caf57a')
        self.rl.pack(side=TOP)
        
        self.rl_lower = Label(self.rf, text= self.R.tile_text, bg='#caf57a')
        self.rl.pack(side=BOTTOM)
        
        #Value update methods
#        self.R.update_disp(self.e.get()) 
        
        
#        #action
        def up_R():
            print('Makes it here')
            self.R.update_disp(self.e.get())
            
        self.e.bind('<ENTER>',up_R())
        
        #main window call - goes at end of class
        self.window.mainloop()


class R:
    def __init__(self):
        d = {'R':'None','R1':'Minor','R2':'Moderate','R3':'Strong','R4':'Severe','R5':'Extreme'}

        self.dkey = 'R'
        self.tile_text = d[self.dkey]
        print(d[self.dkey])
    
    def update_disp(self, dkey):
        self.dkey = dkey
        



class S:
    d = {'S1':'Minor','S2':'Moderate','S3':'Strong','S4':'Severe','S5':'Extreme'}
    pass
    

class G:
    d = {'G1':'Minor','G2':'Moderate','G3':'Strong','G4':'Severe','G5':'Extreme'}
    pass


t = window()

ENTER 应更改为 Return,函数应接受事件

Also, don't forget in a 'class' to use self in the method and self.method to call it.

     def up_R(self, event):
            print('Makes it here')
            self.R.update_disp(self.e.get())
            self.rl.config(text=self.R.dkey)
            
        self.e.bind('<Return>', self.up_R)