当前位置: 首页 > article >正文

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

如下图,当点击“添加按钮”图标后,在ScrollBox中自动添加按钮,每个按钮点击后,将在列表框中加入相应参数的条目,并弹出有参数的对话框。
在这里插入图片描述
第一步:设计窗体
在这里插入图片描述
在窗体中添加ScrollBox(为便于理解超过长宽的内容)、Button、ListBox三个控件
第二步:为按钮添加事件

    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如下

    def ShowTag(self,Sender):
        self.ListBox1.Items.Add(Sender.Tag)
        ShowMessage(Sender.Tag)
        Sender.Free()

注意要在使用完Sender的所有内容后再进行Free()释放
在这里插入图片描述
第四步:重新排列按钮
如果删除按钮后需要重新排列按钮,可以修改ShowTag如下:

    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

在释放完按钮后,通过遍历 剩下的控件,进行重新摆放,效果如下:
在这里插入图片描述
第五步:点击列表,还原按钮
添加列表框的事件如下:

    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,效果如下:
在这里插入图片描述


http://www.kler.cn/a/410017.html

相关文章:

  • 应用系统开发(14) 涡流检测系统硬件设计
  • 室内定位论文速递(11.23-11.25)
  • 微信小程序WXSS全局样式与局部样式的使用教程
  • 基于 Docker 的持续集成/持续交付(CI/CD)流水线构建实战
  • idea-java项目中的全部接口提取
  • 质量留住用户:如何通过测试自动化提供更高质量的用户体验
  • 五、数组基本使用方法
  • unordered_set 和unordered_map的模拟实现(使用开散列)
  • 基于物联网的农业环境监测系统开发(本科毕业论文)
  • 对象排序得到方式
  • 蒙特卡洛方法(Monte Carlo,MC)
  • 音视频基础扫盲之视频码率控制策略(CBR、VBR还是ABR)
  • c API【MySQL】
  • 项目缓存之Caffeine咖啡因
  • 【数据分析】认清、明确
  • Oracle 深入学习 Part 7: Maintaining Online Redo Log Files(维护联机重做日志文件)
  • Linux网络编程----使用多进程实现并发服务器
  • 【Leetcode 每日一题】146. LRU 缓存(c++)
  • Django快速上手:从零到一构建Web应用
  • HTMLCSS:彩色灵动气泡效果