我将如何使用另一个类(PyQt)上的单击按钮删除小部件

Posted

技术标签:

【中文标题】我将如何使用另一个类(PyQt)上的单击按钮删除小部件【英文标题】:how i will remove widget with click button on another class (PyQt) 【发布时间】:2016-09-18 21:37:51 【问题描述】:

有一个错误,我该如何提供这个? 我想用删除按钮删除小部件。可以吗self.removeButton.clicked.connect(self.removing.remove_widget)?我试图用按钮连接另一个类。

from PyQt4 import QtGui, QtCore
import sys

class Main(QtGui.QMainWindow):
    def __init__(self, parent = None):
        super(Main, self).__init__(parent)

        # main button
        self.addButton = QtGui.QPushButton('button to add other widgets')
        self.addButton.clicked.connect(self.addWidget)

        self.removing=Test()
        self.removeButton=QtGui.QPushButton("remove widget")
        self.removeButton.clicked.connect(self.removing.remove_widget)

        # scroll area widget contents - layout
        self.scrollLayout = QtGui.QFormLayout()

        # scroll area widget contents
        self.scrollWidget = QtGui.QWidget()
        self.scrollWidget.setLayout(self.scrollLayout)

        # scroll area
        self.scrollArea = QtGui.QScrollArea()
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setWidget(self.scrollWidget)

        # main layout
        self.mainLayout = QtGui.QVBoxLayout()

        # add all main to the main vLayout
        self.mainLayout.addWidget(self.addButton)
        self.mainLayout.addWidget(self.removeButton)
        self.mainLayout.addWidget(self.scrollArea)

        # central widget
        self.centralWidget = QtGui.QWidget()
        self.centralWidget.setLayout(self.mainLayout)

        # set central widget
        self.setCentralWidget(self.centralWidget)

    def addWidget(self):
        self.scrollLayout.addRow(Test())


class Test(QtGui.QWidget):
  def __init__( self, parent=None):
      super(Test, self).__init__(parent)

      self.lineEdit = QtGui.QLineEdit('I am in Test widget')

      layout = QtGui.QHBoxLayout()
      layout.addWidget(self.lineEdit)
      self.setLayout(layout)

  def remove_widget(self):
      self.lineEdit.deleteLater()




app = QtGui.QApplication(sys.argv)
myWidget = Main()
myWidget.show()
app.exec_()

【问题讨论】:

你得到什么错误? 【参考方案1】:

您创建了一个新类 Test,并连接了新的 Test 然后按钮 del it。

你可以试试这个。

self.kod = []
self.removeButton=QtWidgets.QPushButton("remove widget")
self.removeButton.clicked.connect(self.remove_widget)
...

def addWidget(self):
    temp = Test()
    self.kod.append(temp)
    self.scrollLayout.addRow(temp)

def remove_widget(self):
    self.kod.pop().deleteLater()

【讨论】:

它成功了,谢谢,但我无法理解。为什么 kod(list) 和 scrollLayout 行之间存在连接。我的意思是,当我们从列表中弹出一个项目时,这很奇怪,为什么要删除该行? @Tony Stark ..对不起,我可以解释这个,但我不能使用英文帐户。我试试。当我们添加一个小部件时,我们将它附加到 kod(list) 和 scrollLayout 中。我们使用了 pop(),it(kod) 将删除最后一个并返回它(最后一个)。然后它自己删除(deleteLater())。而 kod(list) 只是一个列表,让我们找到 Test() 即可。

以上是关于我将如何使用另一个类(PyQt)上的单击按钮删除小部件的主要内容,如果未能解决你的问题,请参考以下文章

通过 pyqt5 动态添加和删除小部件

PyQt4 - clicked.connect 记住以前的连接?

PyQt5 在每个选项卡旁边添加添加和删除小部件按钮

如何在pyqt5中将按钮移动到另一个框架?

在 PyQt5 中打开多个窗口时遇到问题

单击标记时,新按钮会自动出现在谷歌地图(Android)上?如何删除?