Currently i am porting a module that uses pythonnet 2.5.2 with python 3.8. One part of that module creates a new font, for .net objects, such as Labels...
In my past approach (pythonnet 2.5.2; python 3.8) i had to use the following overload to perform this action
new_font = Font.Overloads[String, Single, FontStyle](font_type, font_size, font_style)
The overload was needed, because in some combinations of the font_style, i got the following exception (for a combination that will trigger this exception, see the example at the end of the question):
new_font = Font(font_type, font_size, int(font_style))
System.ArgumentException: Ungültiger Parameter.
bei System.Drawing.Font.CreateNativeFont()
bei System.Drawing.Font.Initialize(FontFamily family, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont)
bei System.Drawing.Font..ctor(String familyName, Single emSize, GraphicsUnit unit)
So far so good. If i use the same overload approach with pythonnet 3.0.1 and python 3.9, it wont work due the following exception.
new_font = Font.Overloads[String, Single, FontStyle](font_type, font_size, font_style)
TypeError: No method matches given arguments for Font..ctor: (<class 'float'>, <class 'System.Drawing.FontStyle'>)
But if i skip the overload, it seems to work now? So my questions is, which approach is the "right one" to implement a robust font setter with the current pythonnet version?
For better understanding, here a minimal example to reproduce my issue
import clr
clr.AddReference("System")
clr.AddReference("System.Drawing")
from System.Drawing import Font
from System.Drawing import FontStyle
from System import String
from System import Single
font_type = "Arial"
font_size = 12.0
font_style = FontStyle.Regular | FontStyle.Bold
# fails with pythonnet 3.0.1; works with pythonnet 2.5.2
new_font = Font.Overloads[String, Single, FontStyle](font_type, font_size, font_style)
# works with pythonnet 3.0.1, but fails with pythonnet 2.5.2
new_font = Font(font_type, font_size, font_style)
Ok, seems to be a Bug while overloading class constructors. See https://github.com/pythonnet/pythonnet/issues/2197