用PythonSudio在控件中添加、删除控件,并传递参数(以ScrollBox中添加删除按钮为例)

如下图,当点击"添加按钮"图标后,在ScrollBox中自动添加按钮,每个按钮点击后,将在列表框中加入相应参数的条目,并弹出有参数的对话框。

第一步:设计窗体

在窗体中添加ScrollBox(为便于理解超过长宽的内容)、Button、ListBox三个控件

第二步:为按钮添加事件

python 复制代码
    def Button1Click(self, Sender):
    	# 各个按钮的名称和参数
        arrDic=[
            {"Caption":"一号按钮","value":1},
            {"Caption":"二号按钮","value":2},
            {"Caption":"三号按钮","value":3},
            {"Caption":"四号按钮","value":4},
            {"Caption":"五号按钮","value":5},
            {"Caption":"六号按钮","value":6},
            {"Caption":"七号按钮","value":7},
            {"Caption":"八号按钮","value":8},
            {"Caption":"九号按钮","value":9},
            {"Caption":"十号按钮","value":10},
            {"Caption":"十一号按钮","value":11},
            {"Caption":"十二号按钮","value":12}

        ]
        # 用来设置按钮位置,每4个换一行
        i=0
        # 添加第一个按钮
        for dic in arrDic:
            BtnList=BitBtn(self) 
            BtnList.Caption=dic["Caption"]+chr(10)+"自动生成"
            BtnList.Tag=dic["value"]
            BtnList.Parent=self.ScrollBox1
            BtnList.Width=80
            BtnList.Height=60
            BtnList.Top=10+int(i/4)*60
            BtnList.Left=10+int(i%4)*80

            BtnList.OnClick=self.ShowTag
            BtnList.Show()
            i+=1
    # 点击按钮执行的事件
    def ShowTag(self,Sender):
        self.ListBox1.Items.Add(Sender.Tag)
        ShowMessage(Sender.Tag)

说明:

1、采用BitBtn与普通的Button相比,可以在按钮中添加图像和增加换行等,此处显示了添加换行功能

2、Tag是控件中用来传递参数的,只能用数值型内容,如果要用其他类型,可以以字典的形式用这个Tag来进行查询

3、此处定义了ShowTag过程,用来执行所有按钮的响应,注意,在按钮的Onclick中,需要写ShowTag,不是ShowTag()

第三步:删除按钮

如果点击按钮后,需要删除本按钮,可以修改ShowTag如下

python 复制代码
    def ShowTag(self,Sender):
        self.ListBox1.Items.Add(Sender.Tag)
        ShowMessage(Sender.Tag)
        Sender.Free()

注意要在使用完Sender的所有内容后再进行Free()释放

第四步:重新排列按钮

如果删除按钮后需要重新排列按钮,可以修改ShowTag如下:

python 复制代码
    def ShowTag(self,Sender):
        self.ListBox1.Items.Add(Sender.Tag)
        ShowMessage(Sender.Tag)
        Sender.Free()
        for i in range(self.ScrollBox1.ControlCount):
            self.ScrollBox1.Controls[i].Top=10+int(i/4)*60
            self.ScrollBox1.Controls[i].Left=10+int(i%4)*80

在释放完按钮后,通过遍历 剩下的控件,进行重新摆放,效果如下:

第五步:点击列表,还原按钮

添加列表框的事件如下:

python 复制代码
    def ListBox1Click(self, Sender):
        # 原始数据
        arrDic=[
            {"Caption":"一号按钮","value":1},
            {"Caption":"二号按钮","value":2},
            {"Caption":"三号按钮","value":3},
            {"Caption":"四号按钮","value":4},
            {"Caption":"五号按钮","value":5},
            {"Caption":"六号按钮","value":6},
            {"Caption":"七号按钮","value":7},
            {"Caption":"八号按钮","value":8},
            {"Caption":"九号按钮","value":9},
            {"Caption":"十号按钮","value":10},
            {"Caption":"十一号按钮","value":11},
            {"Caption":"十二号按钮","value":12}

        ]
        # 根据列表内容返回标题
        BtnValue=int(self.ListBox1.Items[self.ListBox1.ItemIndex])
        Caption=""
        for dic in arrDic:
            if dic["value"]==BtnValue:
                BtnCaption=dic["Caption"]
        # 建立新按钮
        BtnList=BitBtn(self)
        BtnList.Caption=BtnCaption+chr(10)+"自动生成"
        BtnList.Tag=BtnValue
        BtnList.Parent=self.ScrollBox1
        BtnList.Width=80
        BtnList.Height=60
        BtnList.OnClick=self.ShowTag
        BtnList.Show()

        # 重新排列按钮
        for i in range(self.ScrollBox1.ControlCount):
            self.ScrollBox1.Controls[i].Top=10+int(i/4)*60
            self.ScrollBox1.Controls[i].Left=10+int(i%4)*80

        # 删除选中项
        self.ListBox1.DeleteSelected()

删除1,7,10后,再点击列表框中的1,效果如下:

相关推荐
珹洺24 分钟前
JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统
java·开发语言·前端·html·intellij-idea·jsp
·醉挽清风·1 小时前
学习笔记—C++—模板初阶
开发语言·c++·笔记·学习
User_芊芊君子1 小时前
跨平台开发选Java还是C?应用场景与性能深度对比
java·c语言·开发语言
一只小松许️2 小时前
Rust泛型与特性
java·开发语言·rust
搬砖工程师Cola4 小时前
<C#>在 C# .NET 6 中,使用IWebHostEnvironment获取Web应用程序的运行信息。
开发语言·c#·.net
八了个戒6 小时前
「数据可视化 D3系列」入门第三章:深入理解 Update-Enter-Exit 模式
开发语言·前端·javascript·数据可视化
失去妙妙屋的米奇7 小时前
matplotlib数据展示
开发语言·图像处理·python·计算机视觉·matplotlib
夏天的阳光吖7 小时前
C++蓝桥杯实训篇(四)
开发语言·c++·蓝桥杯
搞不懂语言的程序员7 小时前
备忘录模式深度解析与实战案例
数据库·python·备忘录模式
angushine8 小时前
Gateway获取下游最终响应码
java·开发语言·gateway