2015-09-06 78 views
1

我有一個示例腳本(如下所示),其中我只是試圖每次按下「Tab」鍵時捕獲tkinter文本小部件的值。兩個功能用於幫助解決這個問題。在Tab改變值之前,應該運行並顯示文本小部件的值。另一個函數應該運行並在Tab更改值後顯示文本小部件的值。如何在Tab鍵在Tkinter中按下後捕獲文本小部件的值?

問題:

的問題是,只有一個函數運行 - 顯示的文本組件之前的標籤改變其值的值的功能。

我的系統:

的Ubuntu 12.04

的Python 3.4.3

Tk的8.5

驗證碼:

import tkinter as tk 

def display_before_value(value): 
     """Display the value of the text widget before the class bindings run""" 
     print("The (before) value is:", value) 
     return 


def display_after_value(value): 
     """Display the value of the text widget after the class bindings run""" 
     print("The (after) value is:", value) 
     return 


# Add the widgets 
root = tk.Tk() 
text = tk.Text(root) 

# Add "post class" bindings to the bindtags 
new_bindings = list(text.bindtags()) 
new_bindings.insert(2, "post-class") 
new_bindings = tuple(new_bindings) 
text.bindtags(new_bindings) 
# Show that the bindtags were updated 
text.bindtags() 
# Outputs ('.140193481878160', 'Text', 'post-class', '.', 'all') 

# Add the bindings 
text.bind("<Tab>", lambda e: display_before_value(text.get("1.0", tk.END))) 
text.bind_class("post-class", "<Tab>", lambda e: display_after_value(text.get("1.0", tk.END))) 

# Show the text widget 
text.grid() 

# Run 
root.mainloop() 

銀行經營在命令行/終端中輸入以上代碼將只顯示display_before_value()函數的輸出。所以我假設後級綁定由於某種原因不起作用。但是,如果我將<Tab>中的綁定更改爲<Key>,則當我在文本窗口小部件中鍵入任意鍵(當然,Tab鍵除外)時,display_after_value()和和和都會正確運行。要顯示

在此先感謝

+0

因此,當您按下標籤頁時,是否希望標籤空間之前的文本能夠被看到,並且標籤空間的文本能夠被看到之後? –

+0

@BobMarshall - 是的,這是正確的。代碼中定義的兩個函數都應該處理這兩個操作。但是,僅執行display_before_value()函數。 – SizzlingVortex

+0

我的答案解決了這個問題。 –

回答

1

如果你想要的文字之前與標籤空間所示的標籤空間和文字後,嘗試使用root.after()。這裏是你的代碼的例子:

import tkinter as tk 

def display_before_value(event): 
     """Display the value of the text widget before the class bindings run""" 
     value = text.get("1.0", tk.END) 
     print("The (before) value is:", value) 
     root.after(1, display_after_value) 
     return 

def display_after_value(): 
     """Display the value of the text widget after the class bindings run""" 
     value = text.get("1.0", tk.END) 
     print("The (after) value is:", value) 
     return 

# Add the widgets 
root = tk.Tk() 
text = tk.Text(root) 

# Add the bindings 
text.bind("<Tab>", display_before_value) 

# Show the text widget 
text.grid() 

# Run 
root.mainloop() 

當TAB鍵被按下時,執行display_before_value功能,打印文本控件的值,而在它的標籤空間。 1毫秒後,它轉到display_after_value函數,該函數顯示包含製表符空間的文本小部件的值。

+0

謝謝!這工作,我可能會接受它作爲答案。 我只想看看是否有沒有使用.after()方法的替代方案。再次感謝! – SizzlingVortex

相關問題