使用 PushButton 循环列表 - PyQt5

Posted

技术标签:

【中文标题】使用 PushButton 循环列表 - PyQt5【英文标题】:Looping through a list using PushButton - PyQt5 【发布时间】:2021-02-22 06:04:22 【问题描述】:

我目前正在尝试遍历一个预定义的列表,在单击pushButton_1 时将label_1 更改为每个索引处的字符串。

我想我必须在循环中定义标签(如下所示),然后使用连接到按钮的函数增加计数,但到目前为止我一直没有成功。

我的另一个想法是“倾听”按钮的点击,然后仅在满足该条件时才增加索引 - 这对我来说似乎更直观,但我不确定如何做到这一点。

from PyQt5 import QtCore, QtWidgets

list_1 = ['name1', 'name2', 'name3', 'name4']

def loop(count_value):
    return count_value + 1

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):

        MainWindow.setWindowTitle('List Looper')
        MainWindow.resize(540, 465)
        MainWindow.setMinimumSize(QtCore.QSize(200, 200))
        MainWindow.setMaximumSize(QtCore.QSize(200, 200))

        self.pushButton_1 = QtWidgets.QPushButton(MainWindow)
        self.pushButton_1.setGeometry(QtCore.QRect(10, 50, 141, 31))
        self.pushButton_1.clicked.connect(loop)
        self.pushButton_1.setText('Next Index')

        self.label_1 = QtWidgets.QLabel(MainWindow)
        self.label_1.setGeometry(QtCore.QRect(10, 10, 281, 16))

        count = 0
        while count < len(list_1):
            self.label_1.setText(list_1[count])

            # Run the loop() function upon button click to increase the count.

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我试图找到类似的问题,但很多似乎都在处理替换小部件元素,而这不是我想要做的。

【问题讨论】:

【参考方案1】:

您的第二种方法是正确的,但您必须将计数器设置为类的属性,并在每次调用与按钮的单击信号关联的方法时增加它:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):

        MainWindow.setWindowTitle("List Looper")
        MainWindow.resize(540, 465)
        MainWindow.setMinimumSize(QtCore.QSize(200, 200))
        MainWindow.setMaximumSize(QtCore.QSize(200, 200))

        self.pushButton_1 = QtWidgets.QPushButton(MainWindow)
        self.pushButton_1.setGeometry(QtCore.QRect(10, 50, 141, 31))
        self.pushButton_1.setText("Next Index")

        self.label_1 = QtWidgets.QLabel(MainWindow)
        self.label_1.setGeometry(QtCore.QRect(10, 10, 281, 16))

        self.counter = 0

        self.pushButton_1.clicked.connect(self.handle_clicked)

    def handle_clicked(self):
        if self.counter < len(list_1):
            self.label_1.setText(list_1[self.counter])
            self.counter += 1

【讨论】:

以上是关于使用 PushButton 循环列表 - PyQt5的主要内容,如果未能解决你的问题,请参考以下文章

PyQT:PushButton 在禁用时接收命令

pyqt5在textBrowser添加文本并自动滑动到底

Pyqt5 输入信息 pushbutton 与 键盘上Enter绑定

pyqt中pushbutton中的属性都有哪些

如何使用pyQT做pythonGUI界面

Python制作简易计算器(PyQt5)