2011-01-31 5 views
0

GUI 위젯의 stdin과 key_events에 대해 상당히 혼란 스럽습니다.GUI 위젯과 표준의 key_events

보통 내 생각에 stdin은 프로세스의 키보드 입력을 얻는 일반적인 방법이라고 생각했습니다. 예 : 프로세스가있는 경우 stdin을 사용하여 키보드 입력을 사용할 수 있습니다. 그리고 이것은 일반적으로 키보드 입력을 얻기 위해 서브 프로세스에 대한 I/O 방향을 만드는데 사용됩니다. 예를 들어 하위 프로세스를 만들 수 있습니다 .Popen (stdin = PIPE)

반면 GUI에서는 입력과 같은 주요 이벤트를 잡기 위해 wx.TexCtrl 또는 py.Shell.shell을 사용하고 있습니다.

GUI 나 pyShell이 ​​실행 중일 때 키보드를 통해 타이핑 할 때 표준 입력 또는 GUI 키 이벤트 캐칭 시스템을 통해 여기에 대해 매우 혼란 스럽습니다. GUI 키 이벤트 시스템을 통해 키보드를 어떻게 가져올 수 있습니까? 일반적인 GUI가 아닌 프로그래밍으로 키보드 입력을 내 자식 프로세스 (GUI 내부)로 리디렉션 할 수 있습니까?

의견을 보내 주셔서 감사합니다.

답변

2

입력 할 때 입력은 GUI 이벤트 메커니즘 이 아니며 stdin의이 아닙니다. 당신은 "키보드 표준 입력"을 얻는 방법을 물었고 그 대답은 다른 유형의 프로그램과 동일합니다 : 읽었을 때 (그러나 거의 확실하게 비어있을 것입니다). 데스크톱의 아이콘을 두 번 클릭하여 시작한 경우 GUI에 표준 입력란이 없을 수 있음을 인식하는 것이 중요합니다.

아니요, 질문을 이해하면 키보드 입력을 [내] 자녀 프로세스로 리디렉션 할 수 없습니다. Stdin은 GUI와 전혀 관련이 없습니다. GUI를 통해 키보드 입력을 읽는 방법이 표준 입력과 완전히 분리되어 있습니다.

+0

브라이언, 답변 해 주셔서 대단히 감사합니다. 나는 당신의 대답을 먼저 클릭한다. 답을 바탕으로 한 몇 가지 질문. sys.stdin이 여전히 존재한다면, GUI 프로그램, 파일 또는 키보드를 통해 입력 할 수 있습니까? bash에서 파이썬으로 wxPython GUI를 시작한다면, bash 윈도우에서 sys.stdin입니까? 또한, 당신이 설명한대로 GUI에 대한 sys.stdin 사용법이없는 것 같습니다. 그러나 sys.stdout은 때때로 textctrl 위젯에 정보를 출력하는 데 유용 할 수 있습니다. 그래서 pyCrust 나 GUI 기반 쉘은 sys.stdin을 사용하지 않고 sys.stdout만을 사용했습니다. 맞습니까? – pepero

+0

@pepero : 아니요, 키보드를 통해 stdin에 입력 할 수는 없지만 적절한 양의 코딩으로''echo hello ''와 같이 gui에 일부 데이터를 파이프 할 수 있습니다. mygui'. 비록 그것이 가치가있을만한 유스 케이스는 생각할 수 없다. –

+0

파이프를 통과하는 데이터의 GUI 뷰어를 삽입하는 것이 하나의 유스 케이스라고 생각합니다. 특히 사소한 파이프 체인에서. 입력 스트림이 높은 경우 스레딩이 적절할 수 있습니다. GUI API는 일반적으로 비동기 이벤트 핸들러로 설계되었으므로 즉, UI 업데이트가 빠르게 버퍼링 될 수 있습니다. – DevPlayer

관련 문제