[英]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_())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.