今天下午我很無聊,決定在Python中實現一個速度打字測試;爲了在每個字符後檢查當前單詞,我在入口窗口小部件上使用了widgetName.bind("<Key>", functionName)
,以便每當在入口窗口小部件中按下任何按鍵時調用該函數。如何在使用.bind調用函數時強制刷新Tkinter小部件
這工作正常,每次按鍵時都會調用該函數,但是當我使用widgetName.get()
從條目窗口小部件收集字符串時發生了問題; .get()
沒有收集小部件的內容,只有那些在調用函數之前的小部件的內容。例如,如果我在輸入窗口小部件中鍵入'P',我的功能將打印'按下一個鍵',但是它只會向控制檯打印一個空行。當我繼續按'y'時,字符串'P'被輸出到控制檯,當第三個按鍵'Py'被輸出時等等。
這讓我相信Tkinter小部件的內容還沒有更新,因爲.bind()
調用是在小部件內容更新之前發生的,因此小部件的內容只有一個按鍵。
我需要知道是否有解決方法,我做了一些研究,發現我可以從函數內調用root.update()
或widget.update()
,這應該強制刷新UI。然而,這並沒有幫助,我仍然面臨同樣的問題。
我的代碼如下
root = Tk()
def keyPress(forSomeReasonThisArgumentFixesABug): ##Argument is because bind passes the event to the function
entryBox.update()
entry, word = entryBox.get(), wordBox.get()
print(entry)
wordBox = Entry(root)
wordBox.grid(row=0, column=0)
entryBox = Entry(root)
entryBox.grid(row=1, column=0)
entryBox.bind("<Key>", keyPress)
可能有人請解釋一下我怎麼能(通過獲得()通過一個參數或函數中)在每個按鍵通過widget的內容的功能。
在此先感謝 編輯:我也曾嘗試使用.bind()
調用的函數調用另一個函數,它看起來噁心,仍然無法正常工作
注:您的解決方案將不能很好地工作,如果觸發結合,關鍵是刪除鍵,或者如果用戶將光標移動到了字符串末尾的任何位置。 –
是的,我已經意識到並解決了退格問題。光標的移動不應該成爲問題,因爲用戶需要很快地輸入單個單詞。 –