PyQt学习笔记:动态添加控件

预期功能:

界面上有一个按钮,点击之后,能够在界面上添加一个控件组,控件组内包括:label,LineEdit,ToolButton等,能多次添加,并且能获取控件上的数据。

 

 

界面设计:(在QT Designer中实现)

新建一个GroupBox和Layout,将Layout拖入GroupBox,再将GroupBox设置为垂直布局,因为在QT Designer中GroupBox只有内部有元素了才可以设置是水平布局还是垂直布局。

再添加一个“添加”按钮,就得到如下界面:

 

 

程序编写:

控件添加

每一个控件组需要用一个单独的子Layout来承载。

所以可以通过计算GroupBox中Layout下的子layout数量来对动态添加的控件进行命名。

# 初始化全局命名空间
names = globals()

# 获取YanshiLayout中子Layout的数量
count = self.YanshisLayout.count()

# 新建一个水平布局的子Layout
self.names["Yanshi_layout_{}".format(count+1)] = QHBoxLayout(self)

# 将新建的Layout添加到UI已有YanshiLayout中
self.YanshisLayout.addLayout(self.names["Yanshi_layout_{}".format(count+1)])

 此处对于新建Layout的命名,通过全局命名空间来实现,下面的动态控件命名也是如此。

def Yanshis_add(self):
    # 在新建的Layout中动态地添加控件
    self.names["Yanshi_label_{}".format(count+1)] = QLabel("Yanshi{}:".format(count+1))
    self.names["Yanshi_lineEdit_{}".format(count+1)] = QLineEdit(self)
    self.names["Yanshi_Button_{}".format(count+1)] = QToolButton(self)

绑定按钮函数

self.Yanshis_add.clicked.connect(self.Yanshi_add)

此处注意:按钮的对象名和绑定的函数名不能一样,不然会报错。

 

 

控件删除

因为是通过Layout数量来实现规范命名的,那么删除同样是通过循环Layout实现。

# 首先判断目前layout中有多少个子layout以此来判断添加了多少个控件组
for i in range(self.YanshisLayout.count()):
    # 循环判断子layout中有多少个控件
    for j in range(self.YanshisLayout.itemAt(i).count()):
        # 挨个删除控件
        self.YanshisLayout.itemAt(i).itemAt(j).widget().deleteLater()
        # 然后删除该子layout
        self.YanshisLayout.itemAt(i).deleteLater()

 

 

控件数据获取

举例的控件组中包含三个控件,其中标签控件和按钮控件都不需要数据读取,只有LineEdit需要读取。循环Layout进行读取。

# 读取Yanshi列表
def Yanshi_read(self):
    # 新建字体列表
    Yanshi_list = []
    for i in range(self.YanshisLayout.count()):
        Yanshi_list.append(self.names["Yanshi_lineEdit_{}".format(i+1)].text())
    return Yanshi_list 

 

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值