簡體   English   中英

PYTHON TKINTER &gt; e = Entry() &gt; e.bind('<enter> ', 功能)</enter>

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

我還不允許添加圖片來提問帖子。

下面的問題:

我的應用程序當前使用的是 window,它編碼在 class 中。

我的最終目標是在將字母和數字輸入到條目小部件時按 Enter,然后按 Enter,然后 function 將更新與我的主 window 中的 label 相關的文本。

詳細說明如下:

我不知道如何創建和輸入,然后綁定回車鍵,這樣當我運行我的應用程序時,我可以單擊該條目,輸入一個值並按回車鍵。

我看到很多按鈕引用,我可以讓按鈕工作,但我正在努力學習如何做事並且不想在這種情況下依賴按鈕。

我在其他一些帖子中看到,如果您使用條目 object 調用.get ,則 python 代碼將執行它並繼續。 我在 function 中使用打印語句進行了測試,我想在按下回車時調用,並且打印語句出現在終端中,然后我在輸入小部件中鍵入任何內容。 然后我嘗試輸入並按回車鍵,什么都不會發生。

作為一項規則,我應該放棄綁定 ENTER 鍵並堅持使用 tkinter 中的按鈕,還是有適當的方法來做到這一點? 在我的代碼示例中,您將看到up_R是我在按Enter時嘗試執行的 function。 如果我使用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 改變,並且 function 應該接受一個事件

另外,不要忘記在“類”中使用 self 在方法和 self.method 來調用它。

     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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM