Ubuntu GUI Development

GTK

1
2
sudo apt install libgtk-3-dev libcairo2-doc freetype2-doc libglib2.0-doc libgtk-3-doc libpango1.0-doc libwayland-doc libx11-doc libxcb-doc devhelp graphicsmagick util-linux-extra glade
sudo apt install libgtk-4-dev libgtk-4-doc gtk-4-examples
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// hello.c
#include <gtk/gtk.h>

int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);

GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GTK Hello World");
gtk_window_set_default_size(GTK_WINDOW(window), 200, 100);

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);
gtk_main();

return 0;
}
1
2
gcc hello.c -o hello `pkg-config --cflags --libs gtk+-3.0`
gcc hello.c -o hello `pkg-config --cflags --libs gtk4`

Qt

1
2
3
4
sudo apt install cmake meson
sudo apt install qtbase5-dev
sudo apt install qt6-base-dev qtcreator
sudo apt install qt5-doc qtbase5-doc qtbase5-examples qt6-base-doc qt6-base-examples
1
2
3
4
5
6
7
8
9
10
11
12
13
// hello.cpp
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

QPushButton button("Qt Hello World");
button.resize(200, 100);
button.show();

return app.exec();
}
1
2
g++ hello.cpp -o hello `pkg-config --cflags --libs Qt5Widgets`
g++ hello.cpp -o hello `pkg-config --cflags --libs Qt6Widgets`

wxWidgets

1
sudo apt install libwxgtk3.2-dev wx3.2-doc
1
2
3
4
5
6
7
8
9
10
11
12
13
// hello.cpp
#include <wx/wx.h>

class MyApp : public wxApp {
public:
virtual bool OnInit() {
wxFrame *frame = new wxFrame(NULL, wxID_ANY, "wxWidgets Hello World");
frame->Show(true);
return true;
}
};

wxIMPLEMENT_APP(MyApp);
1
g++ hello.cpp -o hello `wx-config --cxxflags --libs`

Python binding

1
2
3
sudo apt install libgirepository-2.0-dev

pip install PyGObject PyQt5 PyQt6 wxPython