2011-01-31 21 views
0

我對GUI小部件的stdin和key_events非常困惑。GUI小部件和stdin的key_events

通常在我看來,我認爲stdin是獲取鍵盤輸入的普通方法。例如,如果我有一個進程,那麼我可以使用標準輸入鍵盤輸入。這通常用於使子進程獲得鍵盤輸入的I/O方向。例如,我可以創建子進程.Popen(stdin = PIPE)

另一方面,對於GUI,我使用wx.TexCtrl或py.Shell.shell來捕獲關鍵事件,如輸入。

所以我很困惑這裏,如果我有一個GUI或pyShell運行,當我通過鍵盤打字時,是通過stdin還是通過GUI鍵事件捕獲系統?如果通過GUI鍵盤事件系統,我如何獲得鍵盤標準輸入?作爲普通的非GUI編程,我仍然可以簡單地將鍵盤輸入重定向到我的子進程(在GUI內)嗎?

非常感謝您的任何意見。

回答

2

當您鍵入時,輸入來自stdin的GUI事件機制而不是。你問過如何獲得「鍵盤標準輸入」,其答案與任何其他類型的程序相同:你讀它(但它幾乎肯定是空的)。認識到圖形用戶界面可能沒有標準輸入框,如果它是通過雙擊桌面上的圖標啓動的,這一點很重要。

不,你不能「重定向鍵盤輸入到你的子進程」,如果我理解你的問題。 Stdin與GUI完全沒有任何關係。如何通過GUI讀取鍵盤輸入與stdin完全斷開連接。

+0

布賴恩,非常感謝你的回答。我先點擊你的答案。根據你的答案只是幾個問題。如果sys.stdin仍然存在,我可以在GUI程序中通過文件或鍵盤輸入輸入嗎?如果我在bash中從python啓動wxPython GUI,是在bash窗口中的sys.stdin?另外,根據您所描述的,似乎沒有用於GUI的sys.stdin用法,但是sys.stdout有時可能用於在textctrl小部件上打印出信息。所以基於pyCrust或者GUI的shell實際上只使用了sys.stdout,而不能使用sys.stdin,對嗎? – pepero 2011-01-31 20:43:43