[Gtk-sharp-list] Gtk.Builder & Autoconnect
Baltasar García Perez-Schofield
baltasarq at gmail.com
Mon Jan 23 12:00:54 UTC 2017
Hi, Sascha,
I've figured out (with some help from StackExchange) how to make this work.
You need to:
a) Install glade (v3.20)
b) Install Gtk+3 (pacman -S gtk3 or apt install libgtk3...)
c) Now in MonoDevelop, add the NuGet package Gtk#3 to your project.
d) GtkBuilder will work.
This works in Linux, I haven't figured out how to do it in Windows.
-- Baltasar
El mié., 18 ene. 2017 a las 12:58, Baltasar García Perez-Schofield (<
baltasarq at gmail.com>) escribió:
> Hi, Sascha,
>
> i've written a new GUI for my program with Glade and Gtk.Builder.
>
> Err... why? Nevermind.
>
> Actually i'm having that constructors:
>
> public static PublicanCreators Create()
> {
> Builder builder = new Builder();
> builder.AddFromFile("gui.glade");
> return new PublicanCreators(builder, builder.GetObject("PublicanCreators").Handle);
> }protected PublicanCreators(Builder builder, IntPtr handle) : base(handle){
> _builder = builder;
> builder.Autoconnect(this);
> SetupHandlers();}
>
> I don't have much experience with Glade 3, and Gtk 3. Glade 3 uses Gtk+ 3,
> while Gtk# uses Gtk+2, so at first glance, they are incompatible.
>
> I've found this answer in stack overflow:
>
> http://stackoverflow.com/questions/15599497/how-do-i-use-gtk-builder-in-c-sharp#19352159
>
> They seem to be able to build a user interface using both methods: with
> Gtk.Builder, and with libglade (Glade.XML).
>
> I've tried both. Using the libglade method, I was able to make the program
> compile and run, even with the glade XML file as a resource (this is a must
> to me).
>
> ==
> public Ppal()
> {
> Gtk.Application.Init();
> var uiInterface =
> new Glade.XML( "GladeTest.Res.glade_test-ui.glade", "AppWindow" );
> uiInterface.Autoconnect( this );
> Gtk.Application.Run();
> }
> ==
>
> Unfortunately, nothing shows on screen. I double-checked that the
> GtkWindow had the Visible property set to true. Then I checked the output,
> to find:
> ==
> (GladeTest:7658): libglade-WARNING **: Expected <glade-interface>. Got
> <interface>.
>
> (GladeTest:7658): libglade-WARNING **: did not finish in PARSER_FINISH
> state!
>
> (GladeTest:7658): libglade-CRITICAL **: glade_xml_get_widget: assertion
> 'self != NULL' failed
>
> (GladeTest:7658): libglade-CRITICAL **: glade_xml_signal_autoconnect_full:
> assertion 'self != NULL' failed
> ==
>
> It seems that the XML format generated by Glade is not the expected by
> libglade.
>
> So libglade does not work... what about Gtk.Builder? The same app, with
> the same user interface generated by Glade.
>
> ==
> public Ppal()
> {
> Gtk.Application.Init();
> var guiBuilder = new Gtk.Builder();
> StreamReader uiFile = new StreamReader(
> System.Reflection.Assembly.GetEntryAssembly().
> GetManifestResourceStream( "GladeTest.Res.glade_test-ui.glade" ) )
> ;
>
> guiBuilder.AddFromString( uiFile.ReadToEnd() );
> * // ERROR autoconnect does not exist *
>
> * //guiBuilder.Autoconnect( this );*
> Gtk.Application.Run();
> }
> ==
>
> The problem with Builder is twofold: a) there is not an "autoconnect"
> method, and b) (and most important) the execution fails while executing
> AddFromString(), with a Glib.GException with message "<input>: required
> gtk+ version 3.0, current version is 2.24"
>
> This is actually the problem I had foreseen, they are not compatible since
> Gtk# is stuck in Gtk+2. It requires gtk+3.0 because I messed with the
> settings, by default it requires gtk+3.20.
>
> Maybe someone can provide more info about this issue, perhaps a workaround
> or something. I'm using Mono 4.6.2.
>
> -- Baltasar
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dot.net/pipermail/gtk-sharp-list/attachments/20170123/a88e1968/attachment.html>
More information about the Gtk-sharp-list
mailing list