python - PyQt5界面中通过按钮单击设置标签文本时的延迟

标签 python pyqt pyqt5 telnetlib

我想通过单击按钮(PyQt5 接口(interface))连接到 telnet 设备。按下“连接”按钮后,标签应更改为“正在连接”。建立连接后,相同的标签应更改为“已连接”。建立连接通常需要几秒钟的时间,我希望用户知道系统正在尝试连接。问题是,标签仅在建立连接后设置为“正在连接”,而不是立即设置,因此,如果我在建立连接后将其设置为“已连接”,则标签会绕过“连接”阶段,从无直接变为“已连接”。

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()

关于python - PyQt5界面中通过按钮单击设置标签文本时的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47101280/

相关文章:

python - Gensim:引发 KeyError ("word ' %s' 不在词汇表中"% word)

python - 我可以在 Linux 中写一个包含路径分隔符的文件名吗?

qt - 在上下文管理方面,QFile.open() 的行为与 Python 的 open() 类似吗?

包含变量的 Python 属性名称

python - PyQt5 "xcb"未找到

python - PyQt5 对象的 SEGV_MAPERR

python - 启动 Flask 应用程序隐藏控制台输出?

python - 选中 CheckBox 后在窗口中添加新的 TextBox

python - 小部件调用show()后,resizeEvent不起作用

Python 子进程调用不起作用