如何使用按钮一次迭代一个列表的元素
How to iterate over elements of a list one at a time using a pushButton
我有一个字符串列表,我想通过每次按一个按钮来打印它的下一个元素。
此外,如何通过按下另一个按钮打印列表的前一项?
这是一个示例代码:
from PyQt5 import QtCore, QtWidgets
import sys
class Main(QtWidgets.QMainWindow):
def __init__(self):
self.pushbutton = QtWidgets.QPushButton(self)
self.pushbutton.move(20,20)
self.list = ["first","second","third"]
self.setGeometry(300,300,250,180)
self.pushbutton.clicked.connect(self.showElements)
self.show()
def showElements(self):
pass
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
您可以使用 generators
获得您要求的功能
例如:
a = [1,2,3]
def myFunction():
for item in a:
yield item
# Get iterator
iterator = myFunction()
# Call this on every button push
nextItem = next(iterator)
print(nextItem)
这是一个有效的 repl.it 项目:
试一试:
import sys
from PyQt5 import QtCore, QtWidgets
class Example(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.list = ["first", "second", "third"]
self.len_list = len(self.list) - 1
self.index = 0
self.label = QtWidgets.QLabel(self.list[self.index])
button1 = QtWidgets.QPushButton('next')
button1.clicked.connect(self.search_next)
button2 = QtWidgets.QPushButton('previous')
button2.clicked.connect(self.search_previous)
layout = QtWidgets.QGridLayout(self.centralWidget)
layout.addWidget(self.label, 0, 0, 1, 2, alignment=QtCore.Qt.AlignHCenter)
layout.addWidget(button2, 1, 0)
layout.addWidget(button1, 1, 1)
def search_next(self):
if self.index >= self.len_list:
self.index = 0
else:
self.index += 1
self.label.setText(self.list[self.index])
def search_previous(self):
if self.index <= 0:
self.index = self.len_list
else:
self.index -= 1
self.label.setText(self.list[self.index])
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
我有一个字符串列表,我想通过每次按一个按钮来打印它的下一个元素。
此外,如何通过按下另一个按钮打印列表的前一项?
这是一个示例代码:
from PyQt5 import QtCore, QtWidgets
import sys
class Main(QtWidgets.QMainWindow):
def __init__(self):
self.pushbutton = QtWidgets.QPushButton(self)
self.pushbutton.move(20,20)
self.list = ["first","second","third"]
self.setGeometry(300,300,250,180)
self.pushbutton.clicked.connect(self.showElements)
self.show()
def showElements(self):
pass
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
您可以使用 generators
获得您要求的功能
例如:
a = [1,2,3]
def myFunction():
for item in a:
yield item
# Get iterator
iterator = myFunction()
# Call this on every button push
nextItem = next(iterator)
print(nextItem)
这是一个有效的 repl.it 项目:
试一试:
import sys
from PyQt5 import QtCore, QtWidgets
class Example(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.list = ["first", "second", "third"]
self.len_list = len(self.list) - 1
self.index = 0
self.label = QtWidgets.QLabel(self.list[self.index])
button1 = QtWidgets.QPushButton('next')
button1.clicked.connect(self.search_next)
button2 = QtWidgets.QPushButton('previous')
button2.clicked.connect(self.search_previous)
layout = QtWidgets.QGridLayout(self.centralWidget)
layout.addWidget(self.label, 0, 0, 1, 2, alignment=QtCore.Qt.AlignHCenter)
layout.addWidget(button2, 1, 0)
layout.addWidget(button1, 1, 1)
def search_next(self):
if self.index >= self.len_list:
self.index = 0
else:
self.index += 1
self.label.setText(self.list[self.index])
def search_previous(self):
if self.index <= 0:
self.index = self.len_list
else:
self.index -= 1
self.label.setText(self.list[self.index])
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())