PyQt5界面点击按钮设置标签文本延迟

Delay when setting label text via button click in PyQt5 interface

我想通过单击按钮连接到 telnet 设备(PyQt5 界面)。按下 'Connect' 按钮后,标签应更改为 'connecting'。建立连接后,相同的标签应更改为 'connected'。建立连接通常需要几秒钟,我希望用户知道系统正在尝试连接。问题是标签仅在连接建立后才设置为 'connecting' 而不是立即设置,如果我在连接建立后将其设置为 'connected' ,标签将绕过 'connecting' 阶段然后从一无所有直接变成 'connected'.

import sys
from PyQt5 import QtWidgets
import getstats
username='uname'
password='pword'
import telnetlib
HOST = '192.168.0.5'


class Window(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.b = QtWidgets.QPushButton('Connect')
        self.l = QtWidgets.QLabel('Not connected')

        h_box = QtWidgets.QHBoxLayout()
        h_box.addStretch()
        h_box.addWidget(self.l)
        h_box.addStretch()

        v_box = QtWidgets.QVBoxLayout()
        v_box.addWidget(self.b)
        v_box.addLayout(h_box)

        self.setLayout(v_box)
        self.setWindowTitle('PyQt5 Lesson 5')

        self.b.clicked.connect(self.btn_click)

        self.show()

    def btn_click(self):
        self.l.setText('connecting')
        tn_connect()

def tn_connect():
    telnet = telnetlib.Telnet(HOST)
    telnet.read_until(b"Password:")
    telnet.write((password + "\n").encode('ascii'))
    telnet.write(("exit\n").encode('ascii'))
    telnet_out = str(telnet.read_all())
    print(telnet_out)
    a_window.l.setText('connected')



app = QtWidgets.QApplication(sys.argv)
a_window = Window()
sys.exit(app.exec_())

要强制更新 GUI,您必须调用 processEvents()

def btn_click(self):
    self.l.setText('connecting')
    QtWidgets.qApp.processEvents()
    tn_connect()