pyqt5——窗体中控件的添加与删除

pyqt5实现桌面便签及提醒

 

 

 

添加widget的方法:

使用grid中的addwidget()添加展示控件

 

 

删除widget的方法:(涉及内存管理,不甚明了)

1)使用layout中Item.widget().deleteLater(),获取布局中的item对应的widget,延迟删除widget本身,

可以实现在窗口中移除widget,但grid 的rowcount不变、count不变,grid中的widget仍然可以访问,但不能再次删除

 

2)使用layout中的removeWidget + sip.delete(Widget),也可以实现删除控件,删除更彻底

可以实现在窗口中移除widget,grid 的rowcount不变、count发生变化,grid中的widget不可以访问

 

***grid中有update方法,网上参考资料较少,推测为布局更新,但是对上述情况无作用

 

综上,使用removeWidget + sip.delete(Widget)的方法,以count为标志进行增删、访问

 

 

demo:

点击add,增加一行标签;点击remove,移除所有标签

# -*- coding: utf-8 -*-
# @Time : 2020/4/17 20:36 
# @Author : Zhao HL
# @File : 13_widgetRemoveAdd.py 
import sys
from PyQt5.QtWidgets import *
import sip
class Example(QMainWindow):
    def __init__(self):
        super(Example,self).__init__()
        self.init_UI()

    def init_UI(self):

        self.setWindowTitle('test')
        self.li = []


        self.grid = QGridLayout()
        self.grid.setSpacing(10)
        self.widget = QWidget()
        self.widget.setLayout(self.grid)
        self.setCentralWidget(self.widget)

        print('before hbox:',self.grid.rowCount())
        add_btn = QPushButton('add')
        add_btn.clicked.connect(self.add)
        remove_btn = QPushButton('remove')
        remove_btn.clicked.connect(self.remove)
        hbox = QHBoxLayout()
        hbox.addWidget(add_btn)
        hbox.addWidget(remove_btn)
        self.grid.addLayout(hbox,1,0)
        print('after hbox:', self.grid.rowCount())


        self.li.append(QLabel('lb2'))

        self.grid.addWidget(self.li[0],2,0)


        self.show()


    def add(self):
        add_pos = self.grid.count()+1
        add_num = len(self.li)
        self.li.append(QLabel('lb'+str(add_pos)))

        self.grid.addWidget(self.li[add_num], add_pos, 0)



    def remove(self):
        for i in range(self.grid.count()+1,2,-1):
            print(self.grid.rowCount(),len(self.grid),self.grid.count())

            wd = self.grid.itemAtPosition(i - 1, 0).widget()

            # method 1
            # wd.deleteLater()

            # method 2
            self.grid.removeWidget(wd)
            sip.delete(wd)

        # 尝试继续访问
        for i in range(self.grid.count(), 2, -1):
            print(i,self.grid.itemAtPosition(i - 1, 0).widget().size())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    example = Example()
    sys.exit(app.exec_())

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5是一个用于Python的GUI库,可以用于创建丰富的图形界面应用程序。在PyQt5,我们可以通过美化窗体控件来增加应用程序的吸引力和可用性。下面是一个使用PyQt5实现异形窗体的示例。 首先,我们需要导入PyQt5和其他必要的模块: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtCore import Qt from PyQt5.QtGui import QPainter, QRegion, QColor ``` 然后,我们创建一个自定义的主窗口类,并在其构造函数设置窗口的样式为无标题栏窗口: ```python class MyWindow(QMainWindow): def __init__(self): super().__init__() # 设置窗口为无标题栏窗口 self.setWindowFlags(Qt.FramelessWindowHint) ``` 接下来,我们重写主窗口类的paintEvent方法,并在该方法使用QPainter绘制窗口的形状: ```python def paintEvent(self, event): painter = QPainter(self) painter.setCompositionMode(QPainter.CompositionMode_Clear) painter.fillRect(event.rect(), QColor(0, 0, 0, 0)) painter.setCompositionMode(QPainter.CompositionMode_SourceOver) painter.setBrush(Qt.black) painter.drawRoundedRect(0, 0, self.width(), self.height(), 15, 15) ``` 在此示例,我们使用了QPainter来绘制了一个带有圆角的黑色矩形,以实现异形窗体的效果。 最后,我们创建一个QApplication对象,并在其exec_方法实例化我们自定义的主窗口类: ```python if __name__ == "__main__": app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) ``` 通过运行以上代码,我们就可以看到一个带有异形窗体的窗口实例。 使用PyQt5的美化窗体控件功能,我们可以实现更加吸引人和独特的图形界面效果,提升应用程序的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值