从pyqt中的网格布局中删除最后两个小部件

问题描述 投票:-2回答:1

我具有从QLineEdit中移出最后一个QGridLayout小部件的功能>

它检查小部件的索引是否为最后一个索引,以及小部件是否为QLineEdit的实例--->委托小部件

  def deleate_lastlineedit(self):
        widgets = (self.main_layout.itemAt(i).widget() for i in range(self.main_layout.count()))
        for index, widget in enumerate(widgets):
            if index == (self.main_layout.count()-1) and isinstance(widget, (qtw.QLineEdit,qtw.QLabel)):
                widget.deleteLater()
                break

我已在同一行中添加了Qlabel小部件,并希望该功能在按下按钮后同时释放最后一个Qlabel和Qlinedit小部件,到目前为止,它一次删除了一次,需要单击两次按钮。

我试图插入一个计数器,以便迭代不止于一次迭代,而是止于两次迭代,因此它获得了两个小部件,但没有效果。

还插入了两个版本的函数一个委托qline编辑,另一个委托qlabel并将它们连接到同一个按钮,但均无效

self.getlistof_button.clicked.connect(self.deleate_lastlineedit)
self.getlistof_button.clicked.connect(self.deleate_lastqlabel)

所以我如何同时处理两个小部件?

完整代码

#!/usr/bin/env python

"""
Creates an linedit when button pushed
dleates last linedit


"""

import sys
import sqlite3

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg
from PyQt5 import QtSql as qsql

from  PyQt5 import sip



class AddWidget(qtw.QWidget):
    '''
    Interface
    '''

    # Attribut Signal

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # your code will go here


        # interface

        # position
        qtRectangle = self.frameGeometry()
        centerPoint = qtw.QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())
        # size
        self.resize(700, 410)
        # frame title
        self.setWindowTitle("add  Widget")
        # heading
        heading_label = qtw.QLabel('add Widget')
        heading_label.setAlignment(qtc.Qt.AlignHCenter | qtc.Qt.AlignTop)

        # add Button
        self.addwidget_button = qtw.QPushButton("add Widget")
        self.getlistof_button = qtw.QPushButton("deleate")
        self.linedittext_button = qtw.QPushButton("linedit text")

        self.main_layout = qtw.QGridLayout()
        self.main_layout.addWidget(self.getlistof_button,0,0)
        self.main_layout.addWidget(self.addwidget_button, 1, 0)
        self.main_layout.addWidget(self.linedittext_button, 2, 0)



        self.setLayout(self.main_layout)


        self.show()

        # functionality
        self.addwidget_button.clicked.connect(self.add_widget)
        self.getlistof_button.clicked.connect(self.deleate_lastlineedit)
        self.getlistof_button.clicked.connect(self.deleate_lastqlabel)

        self.linedittext_button.clicked.connect(self.count)




    def count(self):
        x = self.main_layout.rowCount()
        print(self.main_layout.rowCount()+1)
        print(type(x))

    def add_widget(self):
        my_lineedit = qtw.QLineEdit()
        x1 = (self.main_layout.rowCount()+1)
        my_dynmic_label = qtw.QLabel("Dynamic")
        self.main_layout.addWidget(my_dynmic_label,x1,0)
        self.main_layout.addWidget(my_lineedit,x1,1)


    def deleate_lastqlabel(self):
        widgets = (self.main_layout.itemAt(i).widget() for i in range(self.main_layout.count()))
        for index, widget in enumerate(widgets):
            if index == (self.main_layout.count()-1) and isinstance(widget, qtw.QLabel):
                # print("yes")
                widget.deleteLater()
                break



    def deleate_lastlineedit(self):
        widgets = (self.main_layout.itemAt(i).widget() for i in range(self.main_layout.count()))
        for index, widget in enumerate(widgets):
            if index == (self.main_layout.count()-1) and isinstance(widget, qtw.QLineEdit):
                widget.deleteLater()
                break




if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = AddWidget()
    sys.exit(app.exec_())



i具有从QGridLayout分离最后一个QLineEdit窗口小部件的功能,它检查窗口小部件的索引是否为最后一个,以及窗口小部件是否为QLineEdit的实例--->分离......>

python user-interface pyqt pyqt5
1个回答
0
投票
顾名思义,deleteLater()删除对象

后来

© www.soinside.com 2019 - 2024. All rights reserved.