Python - 从 USB 读取时异常的“索引超出范围”

问题描述 投票:0回答:1

一起新年快乐,

通常,我会尝试自己解决所有问题,让我的灰蘑菇保持活力。 但在这种情况下我真的卡住了......

我的任务:

  • 从 USB 设备读取
  • 基于模拟轴的数据创建动画

问题:

  • 它在一台 PC 上同时在 pyCharm 中工作,也作为 EXE
  • 其他 PC 上的索引超出范围

信息

  • 错误属于第 82 行 - Read_X2 = readout[2]
  • 控制台显示成功的USB列表行
  • 错误时程序未冻结(确定打印按钮有效)
  • 我 3 天前开始编码......所以我这样做了,因为我仍然愚蠢 在不关闭我的程序的情况下结束“一段时间”...... List-“Drehung”也可以做得更优雅。但我对错误的初衷 是关于我的自动计数“范围”创作。所以我删除了它并以这种方式制作。 同时我知道,它来自我的 USB 列表。

我敢打赌,这是一个非常简单的问题。我只是忽略了一些东西。 如果事后告诉我解决方案,您也可以对此一笑置之。

问候Emanresu

我的代码沙拉:

from tkinter import *
from PIL import ImageTk, Image
import hid

# START Part to avoid Problems with "One File"

import sys
import os


def resource_path(relative_path):
    """ Get the absolute path to the resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
       base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

# END Part to avoid Problems with "One File"


win = Tk("Test")
win.geometry("460x410")
win.config(bg="grey")
Btn = Button(win, text="ok", activebackground='gray', bg='grey', bd=0)

# Choose a "Path"- Option for "One Directory" or "One File"

# path = "./Animation/"
path = (resource_path("Animation/"))

List = ['000.png',
        '001.png', '002.png', '003.png', '004.png', '005.png', '006.png', '007.png', '008.png', '009.png', '010.png',
        '011.png', '012.png', '013.png', '014.png', '015.png', '016.png', '017.png', '018.png', '019.png', '020.png',
        '021.png', '022.png', '023.png', '024.png', '025.png', '026.png', '027.png', '028.png', '029.png', '030.png',
        '031.png', '032.png', '033.png', '034.png', '035.png', '036.png', '037.png', '038.png', '039.png', '040.png',
        '041.png', '042.png', '043.png', '044.png', '045.png', '046.png', '047.png', '048.png', '049.png', '050.png',
        '051.png', '052.png', '053.png', '054.png', '055.png', '056.png', '057.png', '058.png', '059.png', '060.png',
        '061.png', '062.png', '063.png', '064.png', '065.png', '066.png', '067.png', '068.png', '069.png', '070.png',
        '071.png', '072.png', '073.png', '074.png', '075.png', '076.png', '077.png', '078.png', '079.png', '080.png',
        '081.png', '082.png', '083.png', '084.png', '085.png', '086.png', '087.png', '088.png', '089.png', '090.png',
        '091.png', '092.png', '093.png', '094.png', '095.png', '096.png', '097.png', '098.png', '099.png', '100.png',
        '101.png', '102.png', '103.png', '104.png', '105.png', '106.png', '107.png', '108.png', '109.png', '110.png',
        '111.png', '112.png', '113.png', '114.png', '115.png', '116.png', '117.png', '118.png', '119.png', '120.png',
        '121.png', '122.png', '123.png', '124.png', '125.png', '126.png', '127.png', '128.png', '129.png', '130.png',
        '131.png', '132.png', '133.png', '134.png', '135.png', '136.png', '137.png', '138.png', '139.png', '140.png',
        '141.png', '142.png', '143.png', '144.png', '145.png', '146.png', '147.png', '148.png', '149.png', '150.png',
        '151.png', '152.png', '153.png', '154.png', '155.png', '156.png', '157.png', '158.png', '159.png', '160.png',
        '161.png', '162.png', '163.png', '164.png', '165.png', '166.png', '167.png', '168.png', '169.png', '170.png',
        '171.png', '172.png', '173.png', '174.png', '175.png', '176.png', '177.png', '178.png', '179.png', '180.png',
        '181.png', '182.png', '183.png', '184.png', '185.png', '186.png', '187.png', '188.png', '189.png', '190.png',
        '191.png', '192.png', '193.png', '194.png', '195.png', '196.png', '197.png', '198.png', '199.png', '200.png',
        '201.png', '202.png', '203.png', '204.png', '205.png', '206.png', '207.png', '208.png', '209.png', '210.png',
        '211.png', '212.png', '213.png', '214.png', '215.png', '216.png', '217.png', '218.png', '219.png', '220.png',
        '221.png', '222.png', '223.png', '224.png', '225.png', '226.png', '227.png', '228.png', '229.png', '230.png',
        '231.png', '232.png', '233.png', '234.png', '235.png', '236.png', '237.png', '238.png', '239.png', '240.png',
        '241.png', '242.png', '243.png', '244.png', '245.png', '246.png', '247.png', '248.png', '249.png', '250.png',
        '251.png', '252.png', '253.png', '254.png', '255.png', '256.png', '257.png', '258.png', '259.png', '260.png',
        ]


# Creating Canvas for the Animation
def to_pil2(img, button, x, y, w, h):
    image = Image.open(img)
    image = image.resize((w, h))
    pic = ImageTk.PhotoImage(image)
    button['image'] = pic
    button.image = pic
    button.place(x=x, y=y)


# Optional Visualisation of Readout
label = Label(win, font=('Stencil', 30, 'bold'), bg='grey', fg='black')
label.place(x=5, y=5)


# Collecting Date from USB-Device
# Col0=unknown, Col1+2= X-Axis, Col3+4= Y-Axis, Col5+6= Z-Axis, Col7+8+9= Analog unused, Col10= Buttons
def run():
    simpad = hid.device()
    simpad.open(0x2341, 0x8037)
    simpad.set_nonblocking(True)

    readout = simpad.read(11)
    # read_x1 = readout[1]
    read_x2 = readout[2]
    # read_multiply = (read_x2 * 256)
    # read_full = (read_multiply + read_X1)
    # animation = (read_full / 700) #Option For smoother Movement

# Drawing Animation + Number on Canvas
    to_pil2(path + List[int(read_x2)], Btn, 5, 5, 450, 400)
    label['text'] = read_x2
    win.after(10, run)
    print(readout)


# Pray
run()
Btn["command"] = lambda: print('Freeze-test')
win.mainloop()
python indexing usb hid
1个回答
0
投票

我不熟悉你正在使用的所有库,但我以前做过 I/O 的东西。只看一眼代码,我发现您正在进行非阻塞读取(您使用 True 调用了

set_nonblocking
)。因此,您要么需要处理没有数据或读取的数据量较少的情况,要么需要更改代码以进行阻塞读取,这将等到所有 11 个字节都被读取。

© www.soinside.com 2019 - 2024. All rights reserved.