VB6 frontend GUI with Python

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Claire Blair

    VB6 frontend GUI with Python

    I am trying to write a VB6 (not VB.Net) application that has a console
    window that allows Python command to be typed at the prompt.

    The idea is so that, I can have full Python scripting from within my
    application. I should be able to type commands from a Python script
    (include import etc, so I can use other Python libraries). In other
    words, I want to provide a complete (or almost complete) interactive
    Python Scripting environment from within my application - so that I
    enter commands in the VB6 console, and I get the (text) results
    displayed in my VB6 console, and in the case of a graphic output (let
    say I am importing wxPython for graphing functionality), I would have
    the graph display after I have typed my command in my VB6 console.

    My initial route was to try to embed the Python interpreter, using BOOST
    Python, writing a Win32 DLL around that and then calling the functions
    from VB6. But I had various problems with that approach - so I am now
    looking to use a Python COM server approach (although I would have
    preferred not to touch COM).

    I have done a lot of Googling and research online - but I can't find
    anything remotely useful, taht shows me how to do what I want to do. If
    anyone has done something similar to what I am trying to do, or knows of
    any links that may show me how to do provide a VB6 frontend GUI (i.e.
    console) fo ruse with Python, I will be very grateful.
  • Diez B. Roggisch

    #2
    Re: VB6 frontend GUI with Python

    Claire Blair wrote:
    I am trying to write a VB6 (not VB.Net) application that has a console
    window that allows Python command to be typed at the prompt.
    >
    The idea is so that, I can have full Python scripting from within my
    application. I should be able to type commands from a Python script
    (include import etc, so I can use other Python libraries). In other
    words, I want to provide a complete (or almost complete) interactive
    Python Scripting environment from within my application - so that I
    enter commands in the VB6 console, and I get the (text) results
    displayed in my VB6 console, and in the case of a graphic output (let
    say I am importing wxPython for graphing functionality), I would have
    the graph display after I have typed my command in my VB6 console.
    >
    My initial route was to try to embed the Python interpreter, using BOOST
    Python, writing a Win32 DLL around that and then calling the functions
    from VB6. But I had various problems with that approach - so I am now
    looking to use a Python COM server approach (although I would have
    preferred not to touch COM).
    >
    I have done a lot of Googling and research online - but I can't find
    anything remotely useful, taht shows me how to do what I want to do. If
    anyone has done something similar to what I am trying to do, or knows of
    any links that may show me how to do provide a VB6 frontend GUI (i.e.
    console) fo ruse with Python, I will be very grateful.
    You keep talking about "a console", but OTOH you want to use wxPython -
    which clearly is not console, but GUI. So I'm not really sure what you are
    after.

    It might be possible to make wx render into a given window-handle.

    But may I ask: what is the reason for using VB at all? Why not do the
    GUI-frontend in wxPython?

    Diez

    Comment

    • Claire Blair

      #3
      Re: VB6 frontend GUI with Python



      Diez B. Roggisch wrote:
      Claire Blair wrote:
      >
      >
      >>I am trying to write a VB6 (not VB.Net) application that has a console
      >>window that allows Python command to be typed at the prompt.
      >>
      >>The idea is so that, I can have full Python scripting from within my
      >>application . I should be able to type commands from a Python script
      >>(include import etc, so I can use other Python libraries). In other
      >>words, I want to provide a complete (or almost complete) interactive
      >>Python Scripting environment from within my application - so that I
      >>enter commands in the VB6 console, and I get the (text) results
      >>displayed in my VB6 console, and in the case of a graphic output (let
      >>say I am importing wxPython for graphing functionality), I would have
      >>the graph display after I have typed my command in my VB6 console.
      >>
      >>My initial route was to try to embed the Python interpreter, using BOOST
      >>Python, writing a Win32 DLL around that and then calling the functions
      >>from VB6. But I had various problems with that approach - so I am now
      >>looking to use a Python COM server approach (although I would have
      >>preferred not to touch COM).
      >>
      >>I have done a lot of Googling and research online - but I can't find
      >>anything remotely useful, taht shows me how to do what I want to do. If
      >>anyone has done something similar to what I am trying to do, or knows of
      >>any links that may show me how to do provide a VB6 frontend GUI (i.e.
      >>console) fo ruse with Python, I will be very grateful.
      >
      >
      You keep talking about "a console", but OTOH you want to use wxPython -
      which clearly is not console, but GUI. So I'm not really sure what you are
      after.
      Yes, this seems to be confusing a lot of people. I want to be able to
      use various existing plotting libraries (most of which use wxPython or
      pyOpenGL). The end result is that (assuming my paths etc have been
      correctly set), I can type something like this in my console:
      >>import someGraphingMod ule
      >># a few other commands to fetch data etc ...
      >>>
      >># The following line will then open a window (using
      >># wxPython, wxOpenGL (or whatever windowing library is
      >># is provided by module someGraphingMod ule
      >>someGraphingM odule.plotdata
      >
      It might be possible to make wx render into a given window-handle.
      >
      But may I ask: what is the reason for using VB at all? Why not do the
      GUI-frontend in wxPython?
      >
      Diez
      Simple. its because my main application (the GUI that is), is written in
      VB6. I have a MDI application (i.e. many child windows in the same
      application), and I want to use one of these windows as a console to
      inteactively type Python commands. If I were to use wxPython, I would
      not be able to treat the console 'the same' as the other child windows
      in the application (i.e. minimize, close all etc). Maybe a simpler way
      to think of this is to imagine that I am writing a PythonWin clone in
      VB6. What I am asking here, is how can I create the 'Interactive Window' ?

      Comment

      • Diez B. Roggisch

        #4
        Re: VB6 frontend GUI with Python

        Simple. its because my main application (the GUI that is), is written in
        VB6. I have a MDI application (i.e. many child windows in the same
        application), and I want to use one of these windows as a console to
        inteactively type Python commands. If I were to use wxPython, I would
        not be able to treat the console 'the same' as the other child windows
        in the application (i.e. minimize, close all etc). Maybe a simpler way
        to think of this is to imagine that I am writing a PythonWin clone in
        VB6. What I am asking here, is how can I create the 'Interactive Window' ?
        Your asking for more. Your asking for the interactive window (which
        shouldn't be too hard, just using subprocess and somehow attaching
        stdin/stdout - there should be code that does that) AND you are asking for
        integration of GUI. Which is much more complicated. I'm not a windows guru,
        but at least you need a way to communicate a window-handle to some
        background thread or so of the python interpreter, which will be used to
        render the plot. But that of course implies that the various plotting libs
        are somehow capable of doing so.

        I know that for example under X-windwow, you can "capture" one window and
        display it as part of another. If there exists something like that in
        Windwos, a way to shell various applications, that would help you.

        Apart from that the only thing that comes to my mind is an ActiveX-control,
        but even there I'm ont sure how event-loops and stuff behave.

        All in all - an integration hell....

        Diez

        Comment

        • Ryan Ginstrom

          #5
          RE: VB6 frontend GUI with Python

          On Behalf Of Claire Blair
          I am trying to write a VB6 (not VB.Net) application that has
          a console window that allows Python command to be typed at the prompt.
          I'm not sure what pieces of the puzzle you're missing. Were you able to
          create a simple COM server with Python?

          At a conceptual level, how about this:

          * Your VB form creates an instance of the Python COM server
          * You pass a reference to the form to the COM server (server.SetForm Me
          'etc...)
          * You have a textbox in your VB form. You listen for Return key events
          * When you get a return key, you call a method on the COM server that says
          "submit text line"
          * The COM server examines the last line of text in the form's text box, and
          takes any necessary action, including:
          + Eval a line of interactive Python code
          + Write a result to the VB form's text box

          Do the above steps sound feasible?

          Regards,
          Ryan Ginstrom

          Comment

          Working...