【问题标题】:Erase all the inputs with a button使用按钮擦除所有输入
【发布时间】:2014-09-02 12:31:38
【问题描述】:

我使用 for 循环创建了几个 QLineEdits,并准备创建一个按钮,该按钮可以擦除所有 QLineEdits 中写入的所有内容。这意味着如果我在每个 QLine 中键入一些内容,然后单击按钮可以清除所有行。我的问题是如何编写这样的按钮功能。

这是我的简化版代码。

from PySide import QtGui
from PySide import QtCore
from PySide.QtCore import Signal as pyqtSignal
from PySide.QtCore import Slot as pyqtSlot
import sys

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

        grid = QtGui.QGridLayout()
        grid.setSpacing(10)

        self.widget = QtGui.QWidget()

        # set the widget as parent of its own layout
        self.layout = QtGui.QGridLayout(self.widget)

        for i in range(5):
            line = QtGui.QLineEdit()
            self.layout.addWidget(line,i,0)

        btn = QtGui.QPushButton("Clear All")
        self.layout.addWidget(btn,i+1,0)
        btn.clicked.connect(self.all_clear)

        self.scroll = QtGui.QScrollArea()
        # need this so that scrollarea handles resizing
        self.scroll.setWidgetResizable(True)
        # these two lines may not be needed now
        self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        self.scroll.setWidget(self.widget)

        grid.addWidget(self.scroll, 3, 0)
        self.setLayout(grid)

    def all_clear(self):
        pass





if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    dialog = example()
    dialog.show()
    sys.exit(app.exec_())

我不知道如何编写按钮功能。如果有人可以提供帮助,请提前致谢。

【问题讨论】:

  • 您可以将 OLineEdit 的引用存储在一个列表中,并在按钮正文中单击该列表中每个行编辑的调用清除方法。
  • @Pratham,非常感谢。你的意思是我可以将所有默认值(如空)存储在一个列表中,然后按下清除按钮,这些值设置为默认值吗?如果可能的话,你能给我看一些示例代码吗?

标签: pyside qlineedit qpushbutton


【解决方案1】:

正如@Pratham 所说,将每个QLineEdit 存储在一个列表中:

self.edits = []
for i in range(5):
    line = QtGui.QLineEdit()
    self.layout.addWidget(line,i,0)
    self.edits.append(line)

并让all_clear() 呼叫clear() 他们每个人:

def all_clear(self):
    for edit in self.edits:
        edit.clear()

clear() 方法也是一个插槽,因此您也可以通过将clicked() 信号连接到它而无需定义新方法:

btn = QtGui.QPushButton("Clear All")
self.layout.addWidget(btn,i+1,0)

for i in range(5):
    line = QtGui.QLineEdit()
    self.layout.addWidget(line,i,0)
    btn.clicked.connect(line.clear)

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多