- Notifications
You must be signed in to change notification settings - Fork752
Description
Environment
- Pythonnet version: 3.0.1
- Python version: 3.9
- Operating System: Win10
- .NET Runtime: 4.0.30319.42000
Details
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 clrclr.AddReference("System")clr.AddReference("System.Drawing")from System.Drawing import Font from System.Drawing import FontStyle from System import String from System import Singlefont_type = "Arial"font_size = 12.0font_style = FontStyle.Regular | FontStyle.Bold# fails with pythonnet 3.0.1; works with pythonnet 2.5.2new_font = Font.Overloads[String, Single, FontStyle](font_type, font_size, font_style) # works with pythonnet 3.0.1, but fails with pythonnet 2.5.2new_font = Font(font_type, font_size, font_style)
I also created a question here in stackoverflowhttps://stackoverflow.com/questions/76668946/pythonnet-overloads-difference-between-v2-5-2-and-v3-0-1 (actually I copied my question and added it here)