Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python+;Tkinter:从HID读取数据并同时更新Tkinter标签_Python_Python 3.x_Tkinter_Hid_Pywinusb - Fatal编程技术网

Python+;Tkinter:从HID读取数据并同时更新Tkinter标签

Python+;Tkinter:从HID读取数据并同时更新Tkinter标签,python,python-3.x,tkinter,hid,pywinusb,Python,Python 3.x,Tkinter,Hid,Pywinusb,我试图用pywinusb同时从HID读取数据,然后用该数据更新tkinter窗口。当HID侧发生某种情况时,我希望tkinter窗口立即反映出这种变化 代码如下: import pywinusb.hid as hid from tkinter import * class MyApp(Frame): def __init__(self, master): super(MyApp, self).__init__(master) sel

我试图用pywinusb同时从HID读取数据,然后用该数据更新tkinter窗口。当HID侧发生某种情况时,我希望tkinter窗口立即反映出这种变化

代码如下:

import pywinusb.hid as hid
from tkinter import *

class MyApp(Frame):
    def __init__(self, master):           
        super(MyApp, self).__init__(master)
        self.grid() 
        self.setupWidgets()
        self.receive_data()

    def setupWidgets(self):
        self.data1 = StringVar()
        self.data1_Var = Label(self, textvariable = self.data1)
        self.data1_Var.grid(row = 0, column = 0, sticky = W)

    def update_data1(self, data):
        self.data1.set(data)
        self.data1_Var.after(200, self.update_data1)

    def update_all_data(self, data):
        self.update_data1(data[1])
        #self.update_data2(data[2]), all points updated here...

    def receive_data(self):
        self.all_hids = hid.find_all_hid_devices()
        self.device = self.all_hids[0]
        self.device.open()
        #sets update_all_data as data handler
        self.device.set_raw_data_handler(self.update_all_data)

root = Tk()
root.title("Application")
root.geometry("600x250")
window = MyApp(root)
window.mainloop()
当我运行代码并使设备发送数据时,出现以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files\Python 3.3\lib\tkinter\__init__.py", line 1442, in __call__
    return self.func(*args)
  File "C:\Program Files\Python 3.3\lib\tkinter\__init__.py", line 501, in callit
    func(*args)
TypeError: update_data1() missing 1 required positional argument: 'data'
我想我的问题是:

如何使用HID中的当前数据不断更新标签? 如何将新数据传递给update_data1()

编辑:我应该使用线程,这样我就有一个线程接收数据,mainloop()线程定期检查新数据吗?我以前没有使用过线程,但这是一个解决方案吗

如果有更好的方法,请让我的朋友知道

谢谢

self.data1\u变量(200,self.update\u data1)
是问题所在。您需要将
self.update\u data1
的参数传递到
self.data1\u Var.after
(例如
self.data1\u Var.after(200,self.update\u data1,一些\u数据)
)。否则,在200毫秒后,将调用不带参数的self.update_data1,从而导致您看到的错误

顺便说一句,为什么不直接编辑标签文本而不是将代码放入
self.update\u all\u data
。我不清楚为什么需要
self.data1\u Var.after(200,self.update\u data1)
,因为每当收到新数据时,就会调用
update\u all\u data
,调用
update\u data1
,更新文本