Отображение данных из списка в метке Python - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть список данных, и размер списка не является фиксированным. Я хочу отобразить каждый элемент этого списка в метке (Textview).

        self.valueT.append(value) 
        for i in self.valueT:
            // print(i)
            self.result.setText(i)

здесь в этом коде работа print(i), которая отображает все в консоли, означает, что она отображает результат, но когда я делаю self.result.setText(i), эта не работает означает, что она ничего не отображает в метке , и во-вторых, я хочу отобразить каждое значение после 1se c. self.valueT это список

1 Ответ

1 голос
/ 21 апреля 2020

A-l oop работает так быстро, что наш медленный мозг не может его поднять, поэтому вы не можете видеть текст. Идея выполнения этого каждые T секунд помогает понять, что это не проблема, но вам не нужно использовать for-l oop, а писать его, используя QTimer плюс итератор, то есть это тот же лог c итерации, но с использованием событий таймера:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.label = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter)
        self.setCentralWidget(self.label)

        self.resize(640, 480)

        listT = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")

        self.listT_iterator = iter(listT)

        self.timer = QtCore.QTimer(timeout=self.on_timeout, interval=1000)
        self.timer.start()

        self.on_timeout()

    @QtCore.pyqtSlot()
    def on_timeout(self):
        try:
            value = next(self.listT_iterator)
            self.label.setText(value)
        except StopIteration:
            self.timer.stop()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
...