2015-05-28 93 views
2

因此,在我正在編碼的程序中,我將鍵盤上的Enter鍵綁定到函數。在這個函數中,光標應該移動到條目窗口小部件中文本的末尾。因此,例如,如果用戶在入口窗口小部件中有122 | 57(|是光標),那麼我希望此光標移動到末尾以給出12257 |。我試圖達到這個目標導致了一個錯誤。所以,下面是我一起工作的代碼:Python - 使用綁定鍵移動Tkinter中的條目光標

from tkinter import * 

class Calc: 
    def __init__(self,parent): 
     self.displayentry = StringVar() 
     self.display=Entry(parent, textvariable=self.displayentry) 
     self.display.pack() 

    def equal_input(self): 
     self.display.icursor(len(self.displayentry)) 

root = Tk() 
RunGUI=Calc(root) 
root.bind('<Return>', Calc.equal_input) 
root.mainloop() 

我得到一個錯誤,當我按下回車鍵,上面寫着:「AttributeError錯誤:‘事件’對象有沒有屬性‘顯示器’」

任何幫助將不勝感激。由於

回答

2

你應該bind()在應用程序中的事件。此外,StringVar對象沒有長度 - 您首先需要get()其內容。

from tkinter import * 

class Calc: 
    def __init__(self,parent): 
     self.displayentry = StringVar() 
     self.display=Entry(parent, textvariable=self.displayentry) 
     self.display.pack() 
     parent.bind('<Return>', self.equal_input) 

    def equal_input(self, event): 
     self.display.icursor(len(self.displayentry.get())) 

root = Tk() 
RunGUI=Calc(root) 
root.mainloop() 

不過,我建議你改變你的equal_input()函數來完成,而不是執行以下操作:

def equal_input(self, event): 
    self.display.icursor(END) 

ENDtkinter的參照結束的正規途徑。這是tkinter內的一個變量,指向字符串'end'(因此,如果您喜歡,可以使用'end')。

Here is some more info on the Entry widget.

+1

什麼是真正錯從類(除了他應該用'RunGUI.equal_input',而不是'Calc.equal_input')以外的約束力? – fhdrsdg

+0

@fhdrsdg - 有趣。我從來沒有見過這樣做,但它的工作原理。儘管如此,我無法弄清楚如何將事件綁定到'Calc'實例中的特定窗口小部件。這是如何完成的? – TigerhawkT3

+1

好吧,'RunGUI'只是'Calc'的一個實例,所以通過'RunGUI'你可以訪問'Calc'中'self'的任何東西。爲了只綁定到這個特定'Calc'實例的入口控件,你可以簡單地使用'RunGUI.display.bind('',RunGUI.equal_input)'。但是,如果您創建另一個'Calc'的實例,除非您專門添加它,否則它不會具有此綁定。 – fhdrsdg

1

嗯 - 你爲什麼要使用LEN?您可以使用icursor這樣的:

self.display.icursor('end') 

也...這是我怎麼綁定我的東西....

list_of_entrys = [entry_1, entry2] 

for entry in list_of_entrys: 
    entry.bind('<Return>', lambda event: self.something(event.widget)) 

(該event.widget部分表示在點擊的來源)

...

此外,如果你想,你可以綁定到<Key>(所有按鍵) - 或者,如果它是一個屏幕鍵盤只是增加self.display.icursor('end')到打印的東西鍵...

用戶按下任意鍵。密鑰在傳遞給回調的事件對象的char成員中提供(這是特殊鍵的空字符串)。