首页/文章/ 详情

Workbench平台GUI二次开发入门系列——入门2

2月前浏览850

案例使用方法

本入门教程中的所有案例均已测试通过,具体参考入门1中的使用方法。

目录

01 入门1

02 入门2 

03 布局管理1 

04 布局管理2 

05 菜单栏1 

06 菜单栏2 

07 工具栏 

08 基本控件1 

09 基本控件2 

10 基本控件3 

11 基本控件4 

12 高级控件1 

13 高级控件2 

14 对话框1 

15 对话框2 

16 拖拽功能 

17 绘图1 

18 绘图2 

19 绘图3 

20 绘图4 

21 进度条 

22 游戏——贪吃蛇

入门2

case03 工具提示

目标:创建工具提示功能

工具提示是一个小的矩形弹出框,当用户将指针放在控件上时,它会显示控件功能的简要说明。

本案例中,停留在窗体,提示 "This is a Form";停留在按钮,提示"This is a Button"。

# encoding: utf-8
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Application, Form
from System.Windows.Forms import Button, ToolTip
from System.Drawing import Point, Size

class IForm(Form):
    def __init__(self):
        self.Text = 'Tooltips'
        self.CenterToScreen()
        self.Size = Size(200150)
        tooltip = ToolTip()
        # 帮助提示,‘窗体’
        tooltip.SetToolTip(self, "This is a Form")
        button = Button()
        button.Parent = self
        button.Text = "Button"
        button.Location = Point(5070)
        # 帮助提示,‘按钮’
        tooltip.SetToolTip(button, "This is a Button")

Application.Run(IForm())

效果展示:

case04 有效按钮

目标:创建一个有效的按钮

本案例中,按钮对应了两个事件

  1. 鼠标点击事件:关闭窗口;
  2. 鼠标移入按钮区域事件:打印 'button entered'

鼠标点击事件有两种实现方式:

  1. .Click :此事件可以既可以通过鼠标点击也可以回车键触发;
  2. .MouseClick :此事件只能通过鼠标点击触发。
# encoding: utf-8
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Application, Form, Button
from System.Drawing import Size, Point

class IForm(Form):
    def __init__(self):
        self.Text = 'Button'
        self.CenterToScreen()
        self.Size = Size(200150)
        btn = Button()
        btn.Parent = self
        btn.Text = "Quit"
        btn.Location = Point(5050)
        btn.Click += self.OnClick
        # btn.MouseClick += self.OnClick
        btn.MouseEnter += self.OnEnter
    def OnClick(self, sender, args):
        self.Close()
    def OnEnter(self, sender, args):
        print "button entered"

Application.Run(IForm())

效果展示:

完整的本地电子版本请参阅

01 入门1


来源:CAE中学生
WorkbenchSystem二次开发电子游戏
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-12-26
最近编辑:2月前
CAE无剑
硕士 | 仿真工程师 CAE中学生
获赞 711粉丝 1572文章 272课程 0
点赞
收藏
作者推荐

Hypermesh球六面体自动化网格源码

上次写了一篇在Hypermesh中自动生成六面体网格的二次开发文章:球的六面体网格自动化程序听说Hypermesh可以自动画球的六面体网格了?是当时写的比较随意,里面有几个问题没处理掉,文章中也提到了虽然不影响第一次网格的生成,但是第二次就会报错,今天刚好有空,就把以前的代码修改了下,现在生成球的六面体网格就比较ok了球的套娃行为,10个不同大小的球六面体网格重叠当时的几个问题如图所示:那就从第一个问题开始吧如果存在comp,会报错,以前没有去判断这个comp是否存在,导致我在新建comp的时候就会报错,现在的逻辑就是如果存在,就删除comp,再生成comp,或者说也可以写成判断comp存在的话,在comp名称后面加个数字作为区分#使用的是很简单的catch方法,如果存在先删除,#如果不存在的话,删除这段代码会报错,所以catch{}一下,问题不大catch{*createmarkcomponents1$SphereCompName*deletemarkcomponents1}*createentitycompsname=$SphereCompName第二个问题,八分之一球的solidID识别问题之前都是通过最大的ID来识别的,这个方法本身就是错误的,因为如果新建一个hm运行一次的话,没啥问题,但是实际场景谁会为了生成球网格而新建个hm文件,并且如果我要生成多个不同大小的球,那这个逻辑就不可用了现在的逻辑就是通过坐标来定位到想要的八分之一模型,这样的话,识别的很准确了#留下1/8球体#使用与半径关联的点坐标进行solid的ID识别setretainPoint"$tol$tol$tol"foreach{x100y100z100}$retainPoint{}*createmarksolids1$SphereCompNamesetretainSolidId[lindex[hm_measureshortestdistance2$x100$y100$z100solids100]4]*createmarksolids1"bycompsname"$SphereCompNamehm_markremovesolids1$retainSolidIdsetremove[hm_getmarksolids1]*createmarksolids1{*}$remove*deletesolidswithelems101第三个问题,球六面体网格质量的问题这个问题目前我还没解决,因为在14.0和2021.1上测试,生成的球体网格很规整,但是在2022.3上测试,生成的雅克比较低,而且并不是横平竖直的那种,我觉得这个可能大概率跟网格的基础算法有关,说白了就是版本之间的bug问题,感兴趣的读者可以测试下Hypermesh14.0的效果:Hypermesh2022.3的效果:还可能有个问题就是你的球半径假设只有0.5或者1mm,然后使用0.1mm的网格尺寸,这样的话会报错,需要你在快捷键O中进行geometry和mesh选项中tol的设置,改小一些,就可以生成网格了来源:CAE中学生

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈