在用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显示文字的。
虽然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())
,直接把滑动条始终最大值,即底部
结果:
。
。
。
。