[IronPython] IP 1.0 Beta 2 float to int conversion
J. de Hooge
info at geatec.com
Fri Jan 27 09:47:51 CET 2006
Dino,
Function getMaxSplitterDistance is a Python function, defined in two derived
classes.
It returns an integer. See code below.
Variable state is a float between 0 and 1.
But the same thing happens in the following simpler situation:
If I code literally:
self.widget.SplitterDistance = 100.0
It's ok on IP 0.9.5 but not on IP 1.0 Beta 2, whereas
self.widget.SplitterDistance = 100
is ok on both.
Jacques
--- Minimum (nonsense) code for reproduction of this behaviour:
from sys import *
LoadAssemblyByName("System.Windows.Forms")
from System.Windows import Forms
splitContainer = Forms.SplitContainer ()
print 1
splitContainer.SplitterDistance = 100
print 2
splitContainer.SplitterDistance = 100.0
print 3
--- Output on IP 0.9.5:
1
2
3
--- Output on IP 1.0 Beta 2:
1
2
Traceback (most recent call last):
File C:\activ_dell\prog\fun\src\funTry.py, line 10, in Initialize
TypeError: No conversion from 100 to System.Int32
--- Original code that revealed the change:
class SplitViewBase:
# . Other members
def createWidget (self):
self.widget = Forms.SplitContainer ()
self.widget.Dock = Forms.DockStyle.Fill
def setState (sender, arguments):
self.state = (1.0 * self.widget.SplitterDistance) /
self.getMaxSplitterDistance ()
def getStateAndAllowSetState (sender, arguments):
if self.widget.Visible:
if hasattr (self, 'state'):
try:
self.widget.SplitterDistance = int
(self.state * self.getMaxSplitterDistance ())
except:
pass
self.widget.SplitterMoved += setState
self.widget.VisibleChanged += getStateAndAllowSetState
self.widget.Panel1.Controls.Add (self.childView1 .createWidget
())
self.widget.Panel2.Controls.Add (self.childView2 .createWidget
())
return self.widget
class HSplitView (SplitViewBase):
# . Other members
def getMaxSplitterDistance (self):
return self.widget.Width
# . Other members
class VSplitView (SplitViewBase):
# . Other members
def getMaxSplitterDistance (self):
return self.widget.Height
# . Other members
-----Oorspronkelijk bericht-----
Van: users-bounces at lists.ironpython.com
[mailto:users-bounces at lists.ironpython.com] Namens Dino Viehland
Verzonden: Thursday, January 26, 2006 6:55 PM
Aan: Discussion of IronPython
Onderwerp: Re: [IronPython] IP 1.0 Beta 2 float to int conversion
We have made some changes in this space but I just haven't found the change
that would have affected this yet.
One thing I'm curious about - is getMaxSpliiterDistance C# code or Python
code? The reason I ask if I'm wondering if it's returning a float or a
double (we represent Python float's w/ doubles, so if it came from a literal
it'll be a double).
_____
From: users-bounces at lists.ironpython.com
[mailto:users-bounces at lists.ironpython.com] On Behalf Of J. de Hooge
Sent: Thursday, January 26, 2006 8:10 AM
To: users at lists.ironpython.com
Subject: [IronPython] IP 1.0 Beta 2 float to int conversion
Hi,
Thanks for the new release and all the work invested!
I've just stepped up from IP 0.9.5 to IP 1.0 Beta 2, and I noticed the
following:
In 0.9.5 the following runs fine, where self.widget is a
Forms.SplitContainer (type: Int32 property) and the r.h.s. is a float, e.g.
100.0:
self.widget.SplitterDistance = self.state * self.getMaxSplitterDistance ()
In 1.0 Beta it will stall with the following message:
No conversion from 100 to System.Int32
Stricktly taken, the IP 1.0 is correct, but I found the auto-conversion
convenient.
Has the conversion behaviour been tightened deliberately?
Kind regards
Jacques de Hooge
info at geatec.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20060127/df130e4d/attachment.html>
More information about the Ironpython-users
mailing list