1

我正在尝试使用 PythonNet 将 UserControl 添加到 WinForm 但没有任何运气。为了进行测试,我添加了一个按钮,该按钮显示但未显示 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()
4

0 回答 0