首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetText in Pyqt5

SetText in Pyqt5
EN

Stack Overflow用户
提问于 2021-03-10 06:32:21
回答 2查看 3K关注 0票数 1

我正在用pyqt5开发一个应用程序,我遇到了一个问题。有一个接收数据的脚本,在pyqt5中,"main_text.setText (str (TEXT))“行输出数据,格式为"str”​,但是脚本本身每0.2s接收和输出数据,但是在"main_text.setText (str (文本))“行中,它们不会被更新。尝试通过时间睡眠功能,这个应用程序不能工作,

pyqt5中有什么方法可以将不同的数据输出到相同的文本中?

我的代码:

代码语言:javascript
复制
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow

import sys
import MetaTrader5 as mt5

import time

mt5.initialize()

ticket_info = mt5.symbol_info_tick("EURUSD")._asdict()
bid_usd = mt5.symbol_info_tick("EURUSD").bid

def applecation():
    app = QApplication(sys.argv)
    window = QMainWindow()

    window.setWindowTitle('Test Programm')
    window.setGeometry(300, 250, 350, 200)


    main_text = QtWidgets.QLabel(window)
    main_text.setText(str(bid_usd))
    main_text.move(100,100)
    main_text.adjustSize()

    window.show()

    sys.exit(app.exec_())

if __name__ == "__main__":
    applecation()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-10 06:46:45

您只调用了一次symbol_info_tick方法,因此您将只获得一个数据,如果您希望每T秒获得该信息,那么您必须使用一个在二级线程中执行的while True,这样它就不会阻塞GUI并通过信号发送信息。

代码语言:javascript
复制
import sys
import threading
import time

from PyQt5.QtCore import QObject, pyqtSignal
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow

import MetaTrader5 as mt5


class MetaTrader5Worker(QObject):
    dataChanged = pyqtSignal(str)

    def start(self):
        threading.Thread(target=self._execute, daemon=True).start()

    def _execute(self):
        mt5.initialize()
        while True:
            bid_usd = mt5.symbol_info_tick("EURUSD").bid
            self.dataChanged.emit(str(bid_usd))
            time.sleep(0.5)


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.label = QLabel(self)
        self.setWindowTitle("Test Programm")
        self.setGeometry(300, 250, 350, 200)

    def handle_data_changed(self, text):
        self.label.setText(text)
        self.label.adjustSize()


def main():
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    worker = MetaTrader5Worker()
    worker.dataChanged.connect(window.handle_data_changed)
    worker.start()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
票数 2
EN

Stack Overflow用户

发布于 2021-11-18 17:54:23

您可以使用线程,它比QThreads更容易理解

代码语言:javascript
复制
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import threading
import sys
import MetaTrader5 as mt5

import time

mt5.initialize()

ticket_info = mt5.symbol_info_tick("EURUSD")._asdict()
bid_usd = mt5.symbol_info_tick("EURUSD").bid

def applecation():
    app = QApplication(sys.argv)
    window = QMainWindow()

    window.setWindowTitle('Test Programm')
    window.setGeometry(300, 250, 350, 200)


    main_text = QtWidgets.QLabel(window)
    main_text.move(100,100)
    main_text.adjustSize()

    def update_text():
        while True:
            main_text.setText(str(bid_usd))
            time.sleep(0.2)

    t1 = threading.Thread(target = update_text())
    t1.start()


    window.show()

    sys.exit(app.exec_())

if __name__ == "__main__":
    applecation()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66559491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档