Qt如何在多线程中显示文字

在用python和Qt写一个小的程序,用多线程来着,但是现在多线程里想让QtextEdit显示几行文字却始终无法显示。这是为什么呢?
选了相关的一部分代码写在下面了,调试的时候发现可以进if判断句,但就是打印不出文字

import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.Qt import QThread
from bs4 import BeautifulSoup as bs
import requests
import pandas as pd
import numpy as np
import datetime

# 使用多线程,此为推荐观测点搜索线程
class search(QThread):
    def __init__(self):
        super().__init__()
    def run(self):
        self.location = pd.read_csv("./location.csv")
        self.location_arr = np.array(self.location)

        self.data = MyWindow()
        self.people_number = self.data.people_number.value()
        #self.people_number.split(' ')
        #self.people_number = int(self.people_number)
        #print(self.people_number)
        self.money = self.data.money.value()
        #self.money.split(' ')
        #self.money = self.money.toInt()
        #print(self.money)
        self.today = datetime.date.today()
        self.month = self.today.month
        self.recommand_place = []
        self.recommand_district = [] #推荐观测地所在区
# ???为什么显示不出来啊
        if self.people_number <=2:
            self.recommand_place.append(self.location_arr[0][5])#古北口
            self.recommand_place.append(self.location_arr[0][8])#百花山
            self.recommand_district.append(self.location_arr[1][5])
            self.recommand_district.append(self.location_arr[1][8])
            self.data.recommand_day.append("古北口,百花山")
            self.data.recommand_day.repaint()

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        #self.ui =
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./astronomy.ui")
        self.people_number = self.ui.spinBox #人数
        self.money = self.ui.spinBox_2        #预算
        self.require = self.ui.comboBox        #特殊要求
        self.search_btn = self.ui.pushButton
        self.clear_btn = self.ui.pushButton_2
        self.recommand_day = self.ui.textEdit
        self.search_btn.clicked.connect(self.search)
        #self.search_btn.clicked.connect(self.weather)
#搜索函数
    def search(self):
        self.search = search()
        self.search.start()

    def weather(self):
        self.weather = weather()
        self.weather.start()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()

    app.exec()

看Qt的官方例子代码里,是怎么在线程中让QTextEdit显示文字的。

  • 这篇博客: PyQt5随笔:QTextEdit、QTextBrowser添加的文字超出视图后,滑动条自动移至最底部,显示最新文本解决中的 搭配一定函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 虽然insertPlainText()显示多次输入文本时,滑动条是在顶部的。

    但通过insertPlainText()搭配一定函数也可以实现滑动条始终在底部,实现显示最新输出文本。同时,append()搭配一定函数也可以实现滑动条始终在顶部。这样可以实现更加复杂的程序设计。

    def show_text(self):
        a = '*'
        for i in range(1,50):
            text = '第' + str(i) + '次输入内容' + a * i + '\n'
            self.textEdit.insertPlainText(text)
            self.textEdit.moveCursor(QTextCursor.End)  # Start -> 位于顶部,
            # self.textEdit.verticalScrollBar().setValue(self.textEdit.verticalScrollBar().maximum())  # minimun() -> 位于顶部
    

    有两种函数开始和insertPlainText()搭配,一是self.textEdit.moveCursor(QTextCursor.End),把光标置于底部

    二是self.textEdit.verticalScrollBar().setValue(self.textEdit.verticalScrollBar().maximum()),直接把滑动条始终最大值,即底部

    结果:

    image-20200727111159232