我想通过单击按钮(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_())
答案 0 :(得分:0)
要强制更新GUI,您必须致电processEvents()
def btn_click(self):
self.l.setText('connecting')
QtWidgets.qApp.processEvents()
tn_connect()