Добавить UserControl на WinForm pythonnet

Я пытаюсь добавить UserControl в WinForm, используя PythonNet, но безуспешно. Для тестирования я добавил кнопку, и это показывает, но не UserControl, и я не уверен, что я делаю неправильно.

Весь код можно поместить в один файл py. Я разбил несколько разделов, надеясь, что их будет легче читать.

ПОЛЬЗОВАТЕЛЬСКИЙ КОНТРОЛЬ

class Field(WinForms.UserControl):

    def __init__(self):
        self.InitializeComponents()
        pass

    def InitializeComponents(self):
        self.components = System.ComponentModel.Container()

        self.label = WinForms.Label()
        self.textBox = WinForms.Label()


        ## Label
        # self.label.Anchor = ((WinForms.AnchorStyles)(
        #     ((WinForms.AnchorStyles.Top | WinForms.AnchorStyles.Bottom)
        #      | WinForms.AnchorStyles.Left)))
        self.label.AutoSize = True
        self.label.Location = System.Drawing.Point(3, 7)
        self.label.Name = "label"
        self.label.Size = System.Drawing.Size(29, 13)
        self.label.TabIndex = 0
        self.label.Text = "label"


        ## TextBox
        # self.textBox.Anchor = ((WinForms.AnchorStyles)(
        #     (((WinForms.AnchorStyles.Top | WinForms.AnchorStyles.Bottom)
        #       | WinForms.AnchorStyles.Left)
        #      | WinForms.AnchorStyles.Right)))
        # self.textBox.Location = System.Drawing.Point(115, 3)
        self.textBox.Name = "textBox"
        self.textBox.Size = System.Drawing.Size(260, 20)
        self.textBox.TabIndex = 1


        ## Control
        self.AutoScaleMode = WinForms.AutoScaleMode.Font
        self.Controls.Add(self.textBox)
        self.Controls.Add(self.label)
        self.Name = "Field"
        self.Size = System.Drawing.Size(378, 26)
        # self.PerformLayout()

ФОРМА РОДИТЕЛЯ

class ParentForm(WinForms.Form):

    def __init__(self):
        self.InitializeComponents()

    # region Form Design

    def InitializeComponents(self):
        self.components = System.ComponentModel.Container()
        self.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        self.ClientSize = System.Drawing.Size(385, 180)
        self.Name = "ParentForm"
        self.Text = "Parent Form"


        self.field1 = Field()
        self.field1.Location = Point(13, 13)
        self.field1.Name = "field1"
        self.field1.Size = Size(378, 26)
        self.field1.TabIndex = 1
        self.Controls.Add(self.field1)


        self.button1 = WinForms.Button()
        self.button1.Location = Point(13, 50)
        self.button1.Size = Size(50, 20)
        self.button1.Text = "Button1"
        self.Controls.Add(self.button1)
        pass


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

ТОЧКА ВХОДА И ИМПОРТ

import clr
import System
import System.Windows.Forms as WinForms

from System.IO import File
from System.Text import Encoding
from System.Drawing import Color, Point, Size
from System.Threading import ApartmentState, Thread, ThreadStart



def appThread():
    app = ParentForm()
    WinForms.Application.Run(app)
    app.Dispose()


def appEntry():
    thread = Thread(ThreadStart(appThread))
    thread.SetApartmentState(ApartmentState.STA)
    thread.Start()
    thread.Join()


if __name__ == '__main__':
    appEntry()

0 ответов

Другие вопросы по тегам