pythonnet自定义窗体的构造函数

问题描述:

我有一个从DevExpress.v17.1库扩展XtraForm的窗体自定义构造函数的问题(用C#创建的)。它有两个构造函数:pythonnet自定义窗体的构造函数

protected BaseForm() 
{ 
    InitializeComponent(); 
} 

protected BaseForm(IClient client) 
{ 
    InitializeComponent(); 
    ... many code 
} 

哪里IClient是接口。 该表单具有很多依赖关系,并且它们都在库中编译。 当我向此表格,并试图通过代码来创建实例:

class TestApp(BaseForm): 

def __init__(self): 
    self.Text = "Hello World From Python" 
    self.components = System.ComponentModel.Container() 
    self.AutoScaleBaseSize = Size(5, 13) 
    self.ClientSize = Size(392, 117) 
    h = WinForms.SystemInformation.CaptionHeight 
    self.MinimumSize = Size(392, (117 + h)) 

    # Create the button 
    self.button = WinForms.Button() 
    self.button.Location = Point(160, 64) 
    self.button.Size = Size(150, 20) 
    self.button.TabIndex = 2 
    self.button.Text = "Click Me!" 

    # Register the event handler 
    self.button.Click += self.button_Click 

    # Create the text box 
    self.textbox = WinForms.TextBox() 
    self.textbox.Text = "Hello World" 
    self.textbox.TabIndex = 1 
    self.textbox.Size = Size(126, 40) 
    self.textbox.Location = Point(160, 24) 

    # Add the controls to the form 
    self.AcceptButton = self.button 
    self.Controls.Add(self.button) 
    self.Controls.Add(self.textbox) 

def button_Click(self, sender, args): 
    """Button click event handler""" 
    print ("Click") 
    WinForms.MessageBox.Show("Please do not press this button again.") 

def run(self): 
    WinForms.Application.Run(self) 

def Dispose(self): 
    self.components.Dispose() 
    WinForms.Form.Dispose(self) 

运行初始化代码:

def main(): 
    form = TestApp() 
    form.run() 
    form.Dispose() 

if __name__ == '__main__': 
    main() 

我有一个错误:

Traceback (most recent call last): 
    File "C:/Users/v.khvorostianyi/PycharmProjects/CSharp/Test.py", line 141, in <module> 
    main() 
    File "C:/Users/v.khvorostianyi/PycharmProjects/CSharp/Test.py", line 85, in main 
    form = TestApp() 
TypeError: no constructor matches given arguments 

的Python 3.6.2 = ,pythonnet = 2.3.0
.NET = 4.6.1

Pro ject需要进行自动化测试,这种形式对于工作过程是必需的。 为什么我有这样的错误?

+0

在Python类TestApp(音素表示)meen。感谢您尝试帮助。 –

BaseForm中的构造函数被protected访问修饰符隐藏,只能在BaseForm及其派生类实例内部使用。因此,不能使用form = TestApp(),因为具有空参数的构造函数是隐藏的。

至少有两种方法来解决这个问题:

0您可以使用public访问修饰符在BaseForm构造。

public BaseForm() 
{ 
    InitializeComponent(); 
} 

public BaseForm(IClient client) 
{ 
    InitializeComponent(); 
    //... many code 
} 

1.您可以尝试通过在派生类中使用__new__方法重载.NET构造:即TestApp延长音素表示

def __new__(cls):   
    return BaseForm.__new__(cls)