首页/文章/ 详情

Workbench平台GUI二次开发入门系列——拖拽功能

23小时前浏览10
案例使用方法

本入门教程中的所有案例均已测试通过,具体参考入门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 游戏——贪吃蛇

拖拽功能
case30 拖动按钮

目标:实现按钮的拖拽位置移动

本案例中,可以按住鼠标左键,将按钮任意拖动位置。

# 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 = 'Drag & Drop'
        button = Button()
        button.Parent = self
        button.Text = 'Button'
        button.MouseDown += self.OnMousDown
        button.MouseUp += self.OnMousUp
        button.MouseMove += self.OnMousMove
        button.Location = Point(2020)
        self.isDragging = False
        self.CenterToScreen()
    def OnMousDown(self, sender,  event):
        self.isDragging = True
        self.oldX = event.X
        self.oldY = event.Y
    def OnMousMove(self, sender, event):
        if self.isDragging: 
            sender.Top = sender.Top + (event.Y - self.oldY)
            sender.Left = sender.Left + (event.X - self.oldX)
    def OnMousUp(self, sender,  event):
        self.isDragging = False

Application.Run(IForm())

效果展示:


case31 拖动文字至按钮

目标:实现文字的拖拽移动

本案例中,可以选中输入的文字,并文字拖入到按钮中显示。

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

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

class IForm(Form):
    def __init__(self):
        self.Text = 'Drag & Drop'
        self.AllowDrop = True
        button = Button()
        button.Parent = self
        textBox = TextBox()
        textBox.Parent = self
        button.AllowDrop = True
        button.Location = Point(15050)
        button.DragDrop += self.OnDragDrop
        button.DragEnter += self.OnDragEnter
        textBox.Location = Point(1550)
        textBox.MouseDown += self.OnMousDown
        self.ClientSize = Size(250200)
        self.CenterToScreen()
    def OnMousDown(self, sender, event):
        sender.SelectAll()
        sender.DoDragDrop(sender.Text, DragDropEffects.Copy)
    def OnDragEnter(self, sender, event):
        if event.Data.GetDataPresent(DataFormats.Text):
            event.Effect = DragDropEffects.Copy
    def OnDragDrop(self, sender, event):
        sender.Text =  event.Data.GetData(DataFormats.Text)

Application.Run(IForm())

效果展示:


case32 拖动图像

目标:实现图片的拖拽移动

本案例中,可以按住鼠标左键,将图片任意拖动位置。

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

from System.Windows.Forms import Application, Form, PictureBox, PictureBoxSizeMode
from System.Windows.Forms import Cursors
from System.Drawing import Size, Point, Rectangle, Brushes, Bitmap

path = r"D:\01-图片\12345.png"
class IForm(Form):
    def __init__(self):
        self.ClientSize = Size(350250)
        self.Text = "Dragging Images"
        self.Paint += self.OnPaint
        self.isDragging = False
        self.dropRect = Rectangle(1010200160)
        self.brush = Brushes.Gray
        picBox = PictureBox()
        self.loadImage()
        self.isDragging = False
        self.CenterToScreen()
        picBox.Parent = self
        picBox.Location = Point(10050)
        picBox.Size = Size(self.image.Width, self.image.Height)
        picBox.Image = self.image
        picBox.MouseDown += self.OnMousDown
        picBox.MouseUp += self.OnMousUp
        picBox.MouseMove += self.OnMousMove
        picBox.Cursor = Cursors.Hand
    def loadImage(self):
        try:
            self.image = Bitmap(path)
        except Exception, e: 
            print"Error reading image"
            print e.message
            sys.exit(1)
    def OnMousMove(self, sender, event):
        if self.isDragging:
            sender.Top = sender.Top + (event.Y - self.oldY)
            sender.Left = sender.Left + (event.X - self.oldX)
    def OnMousUp(self, sender, event):
        self.isDragging = False
        if self.dropRect.Contains(sender.Bounds):
            self.brush = Brushes.Gold
        else
            self.brush = Brushes.Gray
        self.Refresh()
    def OnMousDown(self, sender, event):
        self.isDragging = True
        self.oldX = event.X
        self.oldY = event.Y
    def OnPaint(self, event):
        g = event.Graphics
        g.FillRectangle(self.brush, self.dropRect)

Application.Run(IForm())

效果展示:


完整的本地电子版本参阅入门1的其他。

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

Fluent mesh高效网格新玩法-阵列网格

如果有从事动力电池仿真的伙伴,一定对如下模型并不陌生,N个电芯排列。 对于实际的储能或者车用动力pack电芯数量多可达上百个,再划分网格时如都是从几何模型划分,比较容易再多个模型中出错,而且也无法保证每个单体电芯完全一样,今天我们介绍一种阵列网格的用法,可有效解决上述的痛点。案例说明01模型处理 只保留一个冷板(用一块实体板代替)和两个电芯,需要单独保存两个几何文件。这个很重要。 02网格划分由于本次我们只聊阵列的方式,尺寸就采用默认一直update到面网格完成。 然后右键插入网格阵列 并按照如下设置 更新后会变成如下模式,和我们原几何形状一致。 目前网格是没有共节点的,为了保证求解精度,一般需要我们设置共节点,所以需要再fluent mesh中做共享share操作 完成共节点的网格如下 剩下就是一直update,生成体网格 03小结可以从最后生成的网格可以看出,这种方式对于规则的并且阵列排布的模型划分网格非常友好。由于是一些复杂,特征比较多的模型。大家可以多尝试使用来源:CAE中学生

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