Python Tkinter GUI更新取决于串行连接
下午好谢谢大家关注我的问题, 我正在构建一个脚本,通过控制台端口在交换机上进行初始配置,我可以连接到控制台端口。在TKINTER中构建GUI时会出现问题 我希望gui在按下按钮并建立连接时通过指定的某个端口进行连接,使指示灯(使用画布)变为绿色,以显示成功的连接 我的问题是当我尝试建立连接时,让灯变为绿色并保持不变Python Tkinter GUI更新取决于串行连接,python,tkinter,global-variables,updating,Python,Tkinter,Global Variables,Updating,下午好谢谢大家关注我的问题, 我正在构建一个脚本,通过控制台端口在交换机上进行初始配置,我可以连接到控制台端口。在TKINTER中构建GUI时会出现问题 我希望gui在按下按钮并建立连接时通过指定的某个端口进行连接,使指示灯(使用画布)变为绿色,以显示成功的连接 我的问题是当我尝试建立连接时,让灯变为绿色并保持不变 我最初也尝试使用全局,然后意识到窗口循环不断地将其设置回红色 嵌套的while循环---断开Tkinker 导入我创建的一个名为variableset的文件,该文件将变量存储为绿色
- 我最初也尝试使用全局,然后意识到窗口循环不断地将其设置回红色
- 嵌套的while循环---断开Tkinker
- 导入我创建的一个名为variableset的文件,该文件将变量存储为绿色,但由于它不断有一个新实例,所以它只是将tinker中的变量设置为红色
import tkinter as tk
from tkinter import *
import connect
import variableset
setting = variableset.setting
window = tk.Tk()
window.title("Network Wizard 1")
window.geometry('300x500')
# setting =tk.IntVar()
# setting.set(variableset.setting)
#serial port pick the right one
serialportlabel = tk.Label(text="COM Number")
serialport = tk.Entry(width= 7)
serialportlabel.pack()
serialport.pack()
#color alerting!! red bad
alert = Canvas(window, width=50, height=20)
alert.pack()
if setting == 0:
a=alert.create_rectangle(5, 0, 50, 50, fill='red')
else:
a=alert.create_rectangle(5, 0, 50, 50, fill='green')
# #connection part woop woop
connection = tk.Button(text="connect", command = lambda: bus())
connection.pack()
# #firmwarecheck
# firmwarecheck = tk.Button(text="Firmware check")
# firmwarecheck.pack()
# #firmware update
# firmwareupdate= tk.Button(text="Firmware update")
# firmwareupdate.pack()
# #software update
# software = tk.Button(text="software update")
# connect.pack()
# #vmlans
# vlanupdate = tk.Button(text="Vlanupdate")
# vlanupdate.pack()
# disconnect = tk.Button(text="disconnect")
# disconnect.pack()
# qut = tk.Button(text="quite")
# qut.pack()
def bus():
global ser
ser = connect.connect(serialport.get())
global setting
setting = variableset.initial
# def firmware(ser):
# if ser.isOpen() == true :
window.mainloop()
连接代码
import serial
import time
import sys
#connect
def connect(com):
ser = serial.Serial(
port = com, #COM
baudrate=9600,
parity='N',
stopbits=1,
bytesize=8,
timeout=8
)
ser.isOpen()
print(ser.name)
#set variables
enter = str.encode('\r\n') #enter
user = str.encode('admin@sytem\r\n') #default user name
pwd = str.encode('\r\n') #defualt password
qut = str.encode('quit\r')
time.sleep(1.0)
# ser.inWaiting()
ser.write(enter) #promt login
time.sleep(0.5)
ser.write(user) #enter user name
time.sleep(0.5)
ser.write(pwd) #enter password
time.sleep(0.5)
ser.write(enter)
time.sleep(0.5)
ser.write(enter)
time.sleep(0.5)
ser.write(str.encode("sytem\r\n"))
time.sleep(0.5)
ser.write(qut)
ser.write(qut)
input_read = ser.read(500)
input_read = input_read.decode("utf-8","ignore")
print(input_read)
ser.close()
return ser
def write(ser):
ser.write(str.encode(''+'\r\n'))
def disconnect(ser):
ser.write(str.encode('quit\r\n'))
time.sleep(.2)
ser.write(str.encode('quit\r\n'))
time.sleep(.2)
ser.write(str.encode('quit\r\n'))
time.sleep(.2)
ser.close()
可变集合码
global setting
setting = 0
def initial():
global setting
setting = 1
return setting
def unset():
global setting
setting = 0
return setting
非常感谢您的帮助据我们所知,在设置变量之前,if-else语句只运行一次。它不在从其他地方调用的循环或函数中。你发布的代码到底有什么问题?您描述的问题似乎与在不同版本的代码中将其设置回红色的循环有关 无论如何,我怀疑您的问题是试图使用无限循环来不断检查设置,这会阻止tkinter mainloop()运行,从而阻止GUI更新。如果是这样,修复它的最佳方法可能是将“检查设置,然后更改颜色”的代码更改为它自己的函数,该函数在connect函数结束时第一次被调用。然后,check setting函数的末尾应该使用tkinter after()方法安排自己在一段时间延迟后运行,该方法是非阻塞的(asnychrous),允许mainloop()保持运行。其他方法包括一个单独的线程来运行检查设置代码,或者使用tkinter update()方法,但after()方法最简单 注意,connect代码中的sleep()函数在运行时也会阻塞mainloop。我也不清楚您想用variableset代码做什么;调用initial()时,无论串行端口上的实际状态如何,都会将设置设置为1(也称为绿灯)