首页 > 解决方案 > USB 设备检查器的 Tkinter 条目

问题描述

我有一个函数可以检查 USB 设备是否存在并自行返回结果,还有一个 Tkinter GUI 接受此函数的输入。该函数单独工作得很好,但从不使用 Tkinter GUI!(即使我将条目留空,所以函数采用默认变量)

我尝试将输入表单更改为 int 或 float 但它不起作用

def check_USB(vid=0x1447,pid=0x8092):#pings usb device
 logger.debug('checking USB Connection')
 dev = usb.core.find(idVendor=vid, idProduct= pid)
 if dev is None:
    logger.debug ('ALERT our USB device is NOT connected')
 else:
    logger.debug('our USB device is connected') 

 entry_VID = Entry(second_frame, bg="white")
 entry_VID.grid(row=8,column=1,padx=0,pady=5)
 entry_PID = Entry(second_frame, bg="white")
 entry_PID.grid(row=10,column=1,padx=0,pady=5)

 check_USB(vid=int( entry_VID.get() ),pid=int( entry_PID.get() ) )

我尝试了使用 ping ip 地址的函数(但输入的 ip 地址是一个字符串)的相同过程,它运行良好,但是使用此脚本,我总是发现设备未连接。

错误:(0x1447 是我输入的 vid 和 0x8092 的 pid)

invalid literal for int() with base 10:'0x1447'

标签: pythontkinterusbtkinter-entry

解决方案


在您当前的设置下,check_USB(vid=entry_VID.get(),pid=entry_PID.get())立即运行。您需要等待用户填写条目。它可以是这样的:

entry_VID = Entry(second_frame, bg="white")
entry_VID.grid(row=8,column=1,padx=0,pady=5)
entry_PID = Entry(second_frame, bg="white")
entry_PID.grid(row=10,column=1,padx=0,pady=5)

def usb_func():  
    check_USB(vid=int(entry_VID.get(),16),
              pid=int(entry_PID.get(),16))

Button(second_frame,text="Click",command=usb_func).grid(row=11,column=1)

然后,您可以仅在用户按下按钮时执行该功能,或者甚至进行一些验证以检查用户是否在需要时在条目中输入了正确的数字。


推荐阅读