Cool, this made it work with 2.6 beta.

Dino Viehland wrote:
>From the stack trace this looks like it's Gtk# not interacting well
w/ dynamic defined subclasses on .NET.

My guess here is it's because IronPython defines a subclass of Gtk.Window
which lives in an AssemblyBuilder instance.  This is an in-memory only
assembly and therefore .NET throws NotSupportedException when you try
and get the location.  Mono probably returns some value - that value
may or may not make sense instead but at least it lets other code
muddle along.  Given that this works on Mono my guess is the location
isn't all that important to Gtk here or they're handling the odd value
Mono returns already.

So the correct thing would be either for Mono to throw the same exception
and Gtk# to deal w/ that, for Gtk# to deal w/ both, or for .NET to
not throw the exception and return a value like Mono does.  I'm not
sure which one of those it is but the good news is it should be easy to work
around in the latest IronPython.  That's because we have a pre-compiled
types feature that's new in IronPython 2.6.  It's primarily there for
startup perf but it should work for this too.

You can probably just do:

import clr
clr.AddReference('gtk-sharp')
import Gtk
class MyWindow(Gtk.Window): pass

clr.CompileSubclassTypes('mytypes', *clr.GetSubclassedTypes())

Then just copy mytypes.dll to the DLLs directory or clr.AddReference
it at the start of your app.  You'll then get an on-disk version
of the subclass for Gtk.Window and the call to Location should now
be fine.


-----Original Message-----
From: users-boun...@lists.ironpython.com [mailto:users-
boun...@lists.ironpython.com] On Behalf Of Brian Parma
Sent: Friday, July 17, 2009 9:35 PM
To: users@lists.ironpython.com
Subject: [IronPython] IronPython+Gtk#+.NET?

I've been trying to make a simple IronPython+Gtk# app that draws an
image to the screen, and I'm having trouble getting it to run in
windows
(.NET).  It's pretty simple so I attached it at the end.

It runs fine in Mono on Ubuntu and Windows, but when I try to run it on
windows using .NET I get the following error followed by a really long
calltrace:

Marshaling expose_event signal
Exception in Gtk# callback delegate
  Note: Applications can use GLib.ExceptionManager.UnhandledException
to
handle
the exception.
System.Reflection.TargetInvocationException: Exception has been thrown
by the ta
rget of an invocation. ---> System.NotSupportedException: The invoked
member is
not supported in a dynamic assembly.
   at System.Reflection.Emit.AssemblyBuilder.get_Location()
   at GLib.GType.LookupType(IntPtr typeid)
   at ...


I have the latest 'Gtk# for .NET' package from the Mono site, and I've
tried with IP 2.0.1 and IP 2.6 Beta, they give the same results.

I rewrote the program in C# and it works fine in .NET (without Mono),
using #Develop IDE.

Is this possible?

code:

import clr
clr.AddReference('gtk-sharp')
clr.AddReference('gdk-sharp')
import Gtk
import Gdk


class MyWindow(Gtk.Window):
    def __init__(self, title='Main Window'):
        Gtk.Window.__init__(self, title)

        self.pb = Gdk.Pixbuf('image.jpg').ScaleSimple(600,436,
Gdk.InterpType.Bilinear )
        self.da = Gtk.DrawingArea()
        self.da.SetSizeRequest(self.pb.Width, self.pb.Height)
        self.Add(self.da)
        self.Decorated = False

        self.DeleteEvent += self.delete_event
        self.da.ExposeEvent += self.expose_event

    def expose_event(self, *args):
        self.da.GdkWindow.DrawPixbuf(
self.Style.BackgroundGC(self.State), self.pb, 0, 0, 0, 0,-1, -1,
Gdk.RgbDither.None, 0, 0)

    def delete_event(self, *args):
        Gtk.Application.Quit()


if __name__ in ['__main__','Program']:
    Gtk.Application.Init()
    mw = MyWindow('Test')
    mw.ShowAll()
    Gtk.Application.Run()

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to