Текст QLabel не обновляется при использовании QTimer - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь заставить QLabel обновляться с помощью QTimer, но текст не обновляется при использовании .setText().Если я использую .show() на self.price_label, он будет перерисовывать текст поверх QLabel, так что, очевидно, это не правильный путь.

from PyQt5 import QtWidgets, QtGui, QtCore
import getters

class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50, 50, 500, 300)
        self.setWindowTitle("Hello There!")
        self.setWindowIcon(QtGui.QIcon('logo.png'))
        self.exitMenu = QtWidgets.QAction(" &Exit", self)
        self.exitMenu.setShortcut("Ctrl+Q")
        self.exitMenu.setStatusTip("Leave the app")
        self.exitMenu.triggered.connect(self.close_application)
        self.statusBar()

        self.mainMenu = self.menuBar()
        self.fileMenu = self.mainMenu.addMenu("&File")
        self.fileMenu.addAction(self.exitMenu)

        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.home)
        self.timer.start(5000)

    def home(self):
        self.quit_button = QtWidgets.QPushButton("Quit", self)
        self.quit_button.clicked.connect(QtCore.QCoreApplication.instance().quit)

        self.quit_button.resize(100,100)
        self.quit_button.move(100, 70)

        self.symbol = getters.pair.get_price().get("symbol")
        self.price = getters.pair.get_price().get("price")

        print(self.symbol)
        print(self.price)

        self.price_label = QtWidgets.QLabel("%s %s" % (self.symbol, self.price), self)
        self.price_label.resize(200, 100)
        self.price_label.move(200, 100)

        self.price_label.setText("%s %s" % (self.symbol, self.price))

        QtWidgets.QApplication.processEvents()

        self.show()


    def close_application(self):
        sys.exit()


def run():
    app = QtWidgets.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

run()

Я предполагаю, что мой QTimer может быть невернымпомещен и не правильно перерисовывает текст для QLabel?

1 Ответ

0 голосов
/ 19 сентября 2018

Как вы это написали, вы настраиваете несколько элементов интерфейса каждые пять секунд.Большая часть того, что есть в вашем home методе, должно быть перемещено в __init__.Таким образом, пользовательский интерфейс устанавливается только при запуске программы.

Если вы просто хотите менять текст метки каждые пять секунд, попробуйте следующее:

def __init___(self):
    # previous code here
    self.symbol = getters.pair.get_price().get("symbol")
    self.price = getters.pair.get_price().get("price")

def home(self):
    self.symbol = getters.pair.get_price().get("symbol")
    self.price = getters.pair.get_price().get("price")
    self.price_label.setText('%s %s' % (self.symbol, self.price))

Все, что есть в вашем домашнем методе, но не в моем, перейдите к __init__.Также обязательно включите первые экземпляры self.symbol и self.price в __init__.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...