Re: How to update both the Console and the GTKMM gui window after running other functions



Hi,
Have you looked at the code for the progress bar example?
https://developer.gnome.org/gtkmm-tutorial/stable/sec-progressbar.html.en

Ian.

On 31/07/13 09:33, L. D. James wrote:
On 07/30/2013 04:53 PM, Moh B. wrote:
//main.cpp:
//-----------
// Look at this modified code and pay attention to the order of
execution and call th the functions
#include <gtkmm.h>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
         Gtk::Main kit(argc, argv);

         Gtk::Window window;
         Gtk::TextView textview;
         Gtk::Label label;

   string mylabeltext = "This is the first line of text in my gui
window.\n";

         window.set_default_size(600, 360);
         window.set_title("Gtkmm Programming - C++");
         window.set_position(Gtk::WIN_POS_CENTER);

         label.show();
         window.add(label);

         label.set_text(mylabeltext);

         mylabeltext += "About to run some routines...\n";

         label.set_text(mylabeltext);

         cout << "An initial line has been set to the gui window." <<
endl;
         // The Gui Window is displayed
   //==> YOURS      Gtk::Main::run(window);
   // Now my main program has performed some functions and wants to
update
         // the console and the gui window.
     cout << "Continuing after various functions and processing..." <<
endl;
          //A MODIFICATION HERE '+=' instead of yours '=''
         mylabeltext += "Showing the results of the functions and
processing.";
         label.set_text(mylabeltext);
  // AND NOW
    Gtk::Main::run(window);
         return 0;
}
//----------------------------------------------
//code end

/////////////// Makefile ///////////////////
#Begin of Makefile
all:

    @echo " "
    @echo " 1- Compiling..."
    g++ -Wall -g -c *.cpp `pkg-config gtkmm-3.0 --cflags`

    @echo " "
    @echo " 2- Linking..."
    g++ -Wall -g *.o `pkg-config gtkmm-3.0 --libs` -o
Gtkmm34-popup-menu-test

    @echo " "
    @echo " DONE!!!";
#    @echo " "
    chmod +x Gtkmm34-popup-menu-test
    ls . -all

clean:
    rm *.o Gtkmm34-popup-menu-test

/////////////// Makefile ///////////////////
#End of Makefile


How are you doing, Moh B.

I believe you misunderstood my problem. I can output all the text out to the gui window without problems. However, what I'm trying to do is output the text after an operation has taken place. I should have put sleep() functions to represent some operation taking place. I want to give the user a status of what is taking place between operations.

I updated the code to better represent this.

At present I see the output at each stage on the console. However, the gui window isn't updated. It doesn't show anything until after all the functions have completed (in this case sleep() functions.

In the actually program some of the functions will take a few minutes and some of them might take over an hour. I don't want the user to be left with a no status update for the entire time, or between operations.

Notice how the console is output immediately. Then a sleep function. Then the status is updated again informing the user how long the function took. Then another function (in this case a sleep() function.

//code begin:
//main.cpp:
//-----------
// Look at this modified code and pay attention to the order of execution and call th the functions
#include <gtkmm.h>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    Gtk::Main kit(argc, argv);

    Gtk::Window window;
    Gtk::TextView textview;
    Gtk::Label label;

string mylabeltext = "This is the first line of text in my guiwindow.\n";

    window.set_default_size(600, 360);
    window.set_title("Gtkmm Programming - C++");
    window.set_position(Gtk::WIN_POS_CENTER);

    label.show();
    window.add(label);

    label.set_text(mylabeltext);

    mylabeltext += "About to run some routines...\n";

    label.set_text(mylabeltext);

    cout << "An initial line has been set to the gui window." << endl;

sleep(60); // This is the estimated time for a function to run. Some of them takes an hour. mylabeltext += "Continuing after the first fundtion that took 60 seconds\n"; cout << "Continuing after various functions and processing..." << endl;
    label.set_text(mylabeltext);

sleep(60); // This represents another stage of processes and operations. I'm attempting to update
    // the status to the user.
    //A MODIFICATION HERE '+=' instead of yours '=''
mylabeltext += "Other events are taking place that has taken another 60 seconds\n";
    cout << "Other events have taken place" << endl;
    label.set_text(mylabeltext);
    // AND NOW
    Gtk::Main::run(window);
    return 0;
}
//----------------------------------------------
//code end

-- L. James




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]