百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

rhino6.0 python中ETO的组件案例

zhezhongyun 2025-08-02 22:45 22 浏览

1.按钮组件

按钮几乎放置在每个对话框上。创建一个新的按钮很简单。使用forms.Button并指定Text显示在按钮面上。除了创建新按钮外,通常还通过.Click事件附加一个操作。使用 +=语法,如下所示将操作绑定到按钮。

self.m_button = forms.Button(Text = 'OK')

self.m_button.Click += self.OnButtonClick

在类定义中稍后列出的绑定方法,如果点击按钮将运行。

Eto.Dialog 类 有两个特殊保留的按钮名称,即 DefaultButton 和 AbortButton。 DefaultButton 名称将创建一个标准按钮,并且如果使用 Enter Key,它将接收点击事件。 AbortButton 是一个按钮,如果使用 键,它将接收 .Click 事件。 这些按钮是通过控件的名称简单分配的,使用 语法。ESCself的语法DefaultButton是:self.DefaultButton = forms.Button(Text = 'OK'); 通常通过使用对话框的DefaultButton方法来关闭对话框AbortButton。请注意,即使对话框已关闭,控件的值仍然可以被脚本的其余部分访问。

2.日历

日历控件用于选择日期或日期范围。语法: self.m_calender = forms.Calendar()

通常在日历控件上设置其他属性。日历控件有许多属性可以用来修改控件的工作方式。

该.Mode属性设置是否只能设置一个日期forms.CalendarMode.Single或通过设置选择日期范围.mode到forms.CalendarMode.Range。

开始MaxDate和.MinDate结束日期属性限制了可以选择的日期范围。

这.SelectedDate将导致该日期最初被选中。

3.复选框

复选框控件可用于指定True和False:,复选框的最简单语法是:

self.m_checkbox = forms.CheckBox(Text = 'My Checkbox')

该Text属性设置控件旁边文本的可见性。默认情况下,CheckBox未选中,并且带有值None。一旦选中,它包含布尔值True。一旦取消选中,值是False。

复选框的初始状态可以在类中设置。通过添加以下行,复选框将默认选中:

self.m_checkbox.Checked = True

4.颜色选择器

要从下拉菜单中选择一种颜色,请使用ColorPicker。此控件还支持下拉箭头上的右键单击菜单。右键单击菜单提供了颜色取样器和标准系统颜色选择器对话框的访问权限。

下面的简单代码将创建一个默认颜色为白色的颜色选择器:

self.m_colorpicker = forms.ColorPicker()

初始默认颜色可以通过在控制中添加代码来设置:

defaultcolor = Eto.Drawing.Color.FromArgb(255, 0,0)

self.m_colorpicker.Value = defaultcolor

5.组合框

组合框是一个下拉列表,允许直接输入文本,

self.m_combobox = forms.ComboBox()

self.m_combobox.DataStore = ['first pick', 'second pick', 'third pick']

默认值可以通过将索引位置添加到DataStore属性来设置:

self.m_combobox.SelectedIndex = 1

6.日期时间选择器

使用 DateTimePicker 选择日期和/或时间. 类似于 Calendar 控件,还有一个 DateTimePicker。可以在控件上设置 .Mode 以显示 .Date 或 .Time。 .Date 版本与 .Calendar 控件不同,通过下拉菜单访问日期:

该.Time模式创建一个可以选定时间的旋转器

self.m_datetimetime = forms.DateTimePicker()

self.m_datetimetime.Mode = forms.DateTimePickerMode.Time

self.m_datetimetime.Value = System.DateTime.Now

self.m_datetimetime.Value = System.DateTime(2017, 1, 1, 23, 43, 49, 500)

7.下拉菜单

下拉菜单包含项目列表。

self.m_dropdownlist = forms.DropDown()

self.m_dropdownlist.DataStore = ['first', 'second', 'third']

默认选择可以通过在DataStore中使用索引位置来设置:

self.m_dropdownlist.SelectedIndex = 1

8.网格视图

一个虚拟化的数据网格,具有可编辑的单元格。 GridView 用于模拟ListView控件, 创建一个.GridView()比其他ETo控件更复杂。首先创建.GridView,然后用forms.GridColumn()填充控件。每个.GridColumn都有一个.HeaderText,.Editable属性,并包含一个.DataCell。可以使用.DataCell显示TextBoxCell或CheckBoxCell。在创建每个.GridColumn后,将其添加到.GridView通过
self.m_gridview.Columns.Add(column1)方法。下面的示例在.GridView中填充了4列:

访问每个单元格的值forms.GridView可以通过使用该值在.DataStore属性中的索引位置来实现。

dialog.m_gridview.DataStore[1][2]

这将在上述示例中导致“第三选择”的值。

9.组框

GroupBox 显示一组控件,这些控件被边框包围,并且可以有可选的标题来标识该组, 就像较大的对话框,forms.GroupBox() 需要一个布局来帮助定位控件。在布局中,控件被放置。一旦控件被创建,控件就会被添加到布局中的行中,然后这些行会被添加到forms.GroupBox的内容中,用行.

10.图片框

用于显示单个位图图像的控件, 为 ImageView 创建一个空间很容易。下面的前 3 行创建了 forms.ImageView() 并设置其大小。填充用于在 forms.ImageView() 中显示的位图格式更为困难。在这个示例中,一个 RHino 视图捕获被转换成一个 drawing.Bitmap() 并设置为 .Image 属性以在 forms.ImageView() 中显示。

位图可以从多种不同的形式进行格式化。在这种情况下,view.CaptureToBitmap()图像通过
Rhino.UI.EtoExtensions.ToEto()方法被转换为Eto位图。

11. 最简单的 Eto 控件是 forms.Label()。它通常是用于为其他控件创建提示、标签、消息或描述的文本。

self.m_label = forms.Label(Text = 'Enter the Room Number:')

和许多控件一样,上面的行为控件创建一个名称m_label。然后,标签的主要属性是通过设置标签的 Text 属性来显示的文本。

通常情况下,标签的复杂程度不需要如此,但标签还有许多更多的属性。附加属性包括VerticalAlignment、Horizontal Alignment、TextAlignment、Wrap、TextColor和Font。属性可以通过在Label()中包含每个关键词,用逗号(,)分隔来添加:

self.m_label = forms.Label(Text = 'Enter the Room Number:', VerticalAlignment = VerticalAlignment.Center)

标签也可以直接在布局中创建。在向布局添加控件时,有一个简写语法会自动生成标签。forms.Label

在添加行或列时,可以插入一个简单的字符串。Eto会自动将字符串转换为一个标签。这是一种非常快速的方法来创建forms.Label。

12.链接按钮

LinkButton 是一个简单的标签,像按钮一样工作,类似于超链接, 像标准按钮一样forms.LinkButton()需要通过+=语法绑定到一个动作.


13.列表框

创建一个可滚动的项目列表以供选择,这个forms.ListBox()和.DataStore是创建一个forms.ListBox所必需的。该
self.m_listbox.SelectedIndex = 1是可选的,并在DataStore中设置默认选择的对象

self.m_listbox = forms.ListBox()

self.m_listbox.DataStore = ['first pick', 'second pick', 'third pick']

self.m_listbox.SelectedIndex = 1

14.数值输入框

使用鼠标通过旋转按钮调整数值的数值控制, 控制点击上或下箭头时旋转器的行为是forms.NumericUpDown()控制的关键.

self.m_numeric_updown = forms.NumericUpDown()

self.m_numeric_updown.DecimalPlaces = 2

self.m_numeric_updown.Increment = 0.01

self.m_numeric_updown.MaxValue = 10.0

self.m_numeric_updown.MinValue = 1.0

self.m_numeric_updown.Value = 5.0

15.密码框

使用forms.PasswordBox()以输入密码或敏感数据,文本将被遮罩, 该.MaxLength属性是可选的:

self.m_password = forms.PasswordBox()

self.m_password.MaxLength = 7

16.进度条

使用 forms.ProgressBar 来显示长时间任务的进度, 第一步是创建具有最小值和最大值的forms.ProgressBar:

self.m_progressbar = forms.ProgressBar()

self.m_progressbar.MinValue = 0

self.m_progressbar.MaxValue = 10

可以通过控件上的 .Value 属性来设置控件,如下例最后一行所示:

17.单选按钮列表

创建一系列单选按钮,允许从列表中选择一个选项, 创建 forms.RadioButtonList()控件很简单。 然后用一个 .DataStore填充列表:

self.m_radiobuttonlist = forms.RadioButtonList()

self.m_radiobuttonlist.DataStore = ['first pick', 'second pick', 'third pick']

self.m_radiobuttonlist.Orientation = forms.Orientation.Vertical

self.m_radiobuttonlist.SelectedIndex = 1

列表的.Orientation可以设置为
forms.Orientation.Vertical或
forms.Orientation.Horizontal。这是一个可选的属性。

设置.SelectedIndex列表中初始默认选择的对象。

18.富文本区域

多行文本区域,支持富文本格式, 这与TextBox不同,因为它是用于多行文本输入,并且可以接受Tab和输入。文本可以通过使用按键进行格式化。虽然这些按键在不同的平台上可能会有所不同,但此控件的修改按键列表可以在Microsoft MSDN 编辑命令文档找到。

self.m_richtextarea = forms.RichTextArea()

self.m_richtextarea.Size = drawing.Size(400, 400)

19.滑块

水平或垂直滑块,用于从范围内选择一个值, 滑块由控制、最大值和最小值组成。初始.Value 也可以在对话框创建时设置:

self.m_slider = forms.Slider()

self.m_slider.MaxValue = 10

self.m_slider.MinValue = 0

self.m_slider.Value = 3

要将滑块设置为垂直方向,请添加以下行:

self.m_slider.Orientation = forms.Orientation.Vertical

20.旋转器

用于在紧凑空间中显示不确定进度的旋转器,当创建forms.Spinner()时,将.Enabled设置为True将激活旋转动作.

self.m_spinner = forms.Spinner()

self.m_spinner.Enabled = True

21.文本区域

多行文本控件带滚动条, 一个简化的版本 forms.RichTextArea()。 forms.TextArea() 控制器只需要几行代码:

self.m_textarea = forms.TextArea()

self.m_textarea.Size = drawing.Size(400, 400)

22.文本框

TextBox 用于在对话框中输入字符串. 要检查脚本中文本框的内容,文本框控件必须有一个名称来引用它。

self.m_textbox = forms.TextBox()

在这种情况下,名称m_textbox可以在第44行开始的类方法中引用该控件:

def GetText(self):

return self.m_textbox.Text

只是创建一个新的Eto.Forms.TextBox()很常见。TextBox还有许多额外的属性可以用来控制输入。这些属性包括MaxLength、PlaceholderText、InsertMode以及许多可以在Eto TextBox 类中看到的。

23.树形网格视图

带有附加属性列的树视图

TreeGridView 将 Eto 中最复杂的两个控件 TreeView 和 GridView 结合在一起,形成一个控件。这使得控件非常强大,但也需要非常特定的语法才能正常工作。前两行是标准的,创建 forms.TreeGridView() 并设置其大小:

该forms.TreeView()控制需要一些非常特定的语法。一般的TreeView容器足够简单。设置对象然后设置其大小。如果要编辑树中的项目,则.LabelEdit属性可以设置为True.

self.m_treegridview = forms.TreeGridView()

self.m_treegridview.Size = drawing.Size(200, 200)

column1 = forms.GridColumn()

column1.HeaderText = 'Tree'

column1.Editable = True

column1.DataCell = forms.TextBoxCell(0)

self.m_treegridview.Columns.Add(column1)

column2 = forms.GridColumn()

column2.HeaderText = 'Prop 2'

column2.Editable = True

column2.DataCell = forms.TextBoxCell(1)

self.m_treegridview.Columns.Add(column2)

column3 = forms.GridColumn()

column3.HeaderText = 'Prop 3'

column3.Editable = True

column3.DataCell = forms.TextBoxCell(2)

self.m_treegridview.Columns.Add(column3)

treecollection = forms.TreeGridItemCollection()

item1 = forms.TreeGridItem(Values=('node1', 'node1b', 'node1c'))

item1.Expanded = True

item1.Children.Add(forms.TreeGridItem(Values=('node2', 'node2b', 'node2c')))

item1.Children.Add(forms.TreeGridItem(Values=('node3', 'node3b', 'node3c')))

treecollection.Add(item1)

item2 = forms.TreeGridItem(Values=('node11', 'node11b', 'node11c'))

treecollection.Add(item2)

self.m_treegridview.DataStore = treecollection

在设置控件中显示的列后forms.TreeGridView() 需要将这些列创建为form.GridColumn(). .DataCell 属性指向forms.TextBoxCell(index) 存在于.DataStore 在本脚本的最后一行分配的。

树的信息存储在一个forms.TreeGridCollection()中。树中的项目是一个forms.TreeGridItems,它包含.Values的元组。每个元组将填充forms.TreeGridView()中的一行。

该forms.TreeGridView不会自动更新其内容。在完成所有控制设置后,DataStore被设置为treecollection。这样做可能会导致一个不显示数据的控制。

相关推荐

Opinion丨Struggle Against U.S. Mind colonization in the Global South

Editor'snote:Thismonth,XinhuaNewsAgency'sThinkTankreleasedareporttitled"Colonizationof...

爱可可AI论文推介(2020.11.4)_爱可可女装旗舰店

LG-机器学习CV-计算机视觉CL-计算与语言AS-音频与语音RO-机器人(*表示值得重点关注)1、[LG]*CombiningLabelPropagationan...

何新:罗马伪史考英文版序言_罗马史学

2019-10-2514:48:27何新:罗马伪史考序言(英文译本)HeXin:PreambleofResearchonPseudo-historyofRome1Afewyear...

XPeng Stock Rises Over 4% after Q2 Revenue and EV Margin Set Records

TMTPOST--TheAmericandepositaryreceipts(ADRs)ofXPengInc.rosearound4.2%onTuesdayaftert...

英汉世界语部首(八)_英文部首字典

本节讲八个部首,分别是:弓gōng【ECWLrad】bow廾gǒng【ECWLrad】twen广guǎng【ECWLrad】vast己jǐ【ECWLrad】self已yǐ...

一课译词:划水_划水是什么地方的方言

[Photo/SIPA]懒惰是人类的天性,因此才总有人会在工作时“划水”。“划水【huáshuǐ】”,本意是指“用胳膊划的动作(makestrokeswithone’sarms)”,延伸为“...

首测!GPT-4o做Code Review可行吗?

编辑|言征出品|51CTO技术栈(微信号:blog51cto)近日,OpenAI一记重拳,推出了GPT-4o(“o”表示“omni”),将语音识别和对话方面的优势展示的淋漓尽致。几乎可以肯定,...

C++|漫谈STL细节及内部原理_c++ stl详解

1988年,AlexanderStepanov开始进入惠普的PaloAlto实验室工作,在随后的4年中,他从事的是有关磁盘驱动器方面的工作。直到1992年,由于参加并主持了实验室主任BillWo...

C++ inline关键字深度解析:不止于优化的头文件定义许可

在C++开发中,几乎每个程序员都用过inline关键字,但多数人只停留在“内联优化”的表层理解。事实上,inline的真正威力在于它打破了C++的单一定义规则(ODR)限制,成为头文件中安全定义函数的...

实用 | 10分钟教你搭建一个嵌入式web服务器

之前分享的文章中提到了几种可以在嵌入式中使用的web服务器。嵌入式web服务器就是把web服务器移植到嵌入式系统的服务器。它仍然是基于http文本协议进行通信的,具有标准的接口形式,对客户端...

中间语言格式_中间格式文本是什么

在通常情况下,编译器会将目标语言转换成某种中间语言格式,而不是直接将源代码转换成二进制机器指令,不少c语言编译器,都会将代码编译成汇编语言,然后再通过汇编语言编译器将汇编代码转换成目标机器可执行的二进...

一线开发大牛带你深度解析探讨模板解释器,解释器的生成

解释器生成解释器的机器代码片段都是在TemplateInterpreterGenerator::generate_all()中生成的,下面将分小节详细展示该函数的具体细节,以及解释器某个组件的机器代码...

干货,Web开发和前端开发逆天工具大全

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(点击页底“阅读原文”前往下载)●●●逆天工具CDN资源库国内Bootstrap中文网开源项目免费CDN服务36...

移动端rem+vw适配_移动端web页面适配方案

rem:rem是相对单位,设置根元素html的font-size,比如给html设置字体大小为100px,1rem=100px;rem缺点:1.和根元素font-size值强耦合,系统字...

从零搭建 React 开发 H5 模板_react html5

项目创建创建项目文件夹mkdir react-democd react-demonpm init -y依赖安装yarn add rea...