stdin in embedded python

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Nov 2 01:20:37 EST 2009


En Sun, 01 Nov 2009 23:13:10 -0300, Dave Angel <davea at ieee.org> escribió:
> Gabriel Genellina wrote:
>> En Sun, 01 Nov 2009 13:34:44 -0300, KillSwitch  
>> <gu.yakahughes at gmail.com> escribió:
>>> On Nov 1, 5:34 am, Dave Angel <da... at ieee.org> wrote:
>>>> KillSwitch wrote:
>>
>>>> > I have a C++ program, with a GUI, into which I have embedded  
>>>> python. I
>>>> > have made several python functions in C++, one of which I use to
>>>> > override the normal stdout and stderr so that they print to a text  
>>>> box
>>>> > of my GUI. One thing I cannot think of how to do is to redefine  
>>>> stdin
>>>> > so that it pauses the program, waits for a user to type input into  
>>>> the
>>>> > box, hit enter, and takes input from another text element and sends  
>>>> it
>>>> > to python like it was the console.
>>>>
>>>> I suspect you don't really want to redirect stdin, but instead  
>>>> implement
>>>> raw_input().
>>>
>>> But what would the function do? How would it pause python and wait for
>>> it to have text to send?
>>
>> Whatever you want. You don't have to "pause python", Python itself  
>> won't resume until your function doesn't return. [example using  
>> Tkinter.askstring]
>>
> I think I see the OP's problem.  He has written a GUI program in C++,  
> and is using (embedding) Python functions into it.  So presumably those  
> functions are being called from events in the C++ event loop.
>
> If one of those functions tries to call back into C++ code, the event  
> loop will never get control, to process the events from the standard UI  
> controls.
>
> So if the input is to be handled as an integral part of the C++ UI,  
> there's a distinct problem.
>
> On the other hand, Gabriel's dialog box should work fine, as long as you  
> don' t mind a modal dialog box as a solution.  I don't know tkinter's  
> askstring, but I suspect it'd work.  However, the rest of the C++ GUI  
> would be frozen, which could be a problem.

Perhaps looking a other examples may help. Both IDLE and PythonWin replace  
raw_input with a message box; IDLE is a Tkinter application, and PythonWin  
wraps MFC. Both have a main message loop and use a modal message box.

-- 
Gabriel Genellina




More information about the Python-list mailing list