在PyQt5界面中通过按钮单击设置标签文本时出现延迟

时间:2017-11-03 17:23:17

标签: python pyqt pyqt5 telnetlib

我想通过单击按钮(PyQt5接口)连接到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_())

1 个答案:

答案 0 :(得分:0)

要强制更新GUI,您必须致电processEvents()

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