子线程更新界面的困境,求指点。
事情大概是这样子的:import...
class Mysignals(QObject):
text_print = Signal(str)
class Myui:
def __init__(self):
self.sg_main = Mysignals()
self.sg_main.text_print.connect(self.print2ui)
bt.clicked.connect(partial(self.f1))
...
def print2ui(self,text):
self.ui.Textlog.append(str(text))
def f1(self):
def lcf1():
self.sg_main.text_print.emit('Start')
b = B()
b.f2()
self.sg_main.text_print.emit('Finish')
thread_1 = Thread(target=lcf1)
thread_1.start()
class B:
def __init__(self):
...
def f2(self):
...
...
简单说明一下,子线程运行B类实例的方法f2,想要将该方法内部的一些运行状况更新到界面上,有办法实现吗?
有想了很多,都没有头绪。更新界面的方法在UI类中,一旦实例界面就初始化了。
求指点!! 打开UI后,下载验证码,加载到UI
class DownloadYZMThread(QThread):
get_yzm_url_signal = pyqtSignal(str)
def run(self):
url = APITool.download_yzm()
#print("下载验证码")
self.get_yzm_url_signal.emit(url)
class LoginPan(QWidget,Ui_Form):
"初始化方法"
success_login = pyqtSignal(str)# 登陆界面接口
def __init__(self,parent=None,*args,**kwargs):
super().__init__(parent,*args,**kwargs)
self.setupUi(self)#使LoginPan的实例对象,可以调用setupUi方法
self.refresh_yzm()#初始化的时候刷新验证码
def refresh_yzm(self):
print("刷新代码")
thread = DownloadYZMThread(self)
def parse_yzm_url(url):
url = APITool.download_yzm()
pixmap = QPixmap(url)
self.label.setPixmap(pixmap)
self.label.clear_points()# 清除选中的标签
thread.get_yzm_url_signal.connect(parse_yzm_url)
thread.start() #开始下载验证码子线程 Stubborn 发表于 2021-4-22 11:47
打开UI后,下载验证码,加载到UI
收到,类实例的时候,将信号属性连接到主线程中的方法,就可以了。
页:
[1]