我使用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_())
我不知道如何编写按钮功能。如果有人可以提供帮助,请提前谢谢。
答案 0 :(得分: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)