【问题标题】:Error while getting the index from an empty Listbox .get_indexes()从空列表框 .get_indexes() 获取索引时出错
【发布时间】:2021-11-25 17:22:51
【问题描述】:

当我想在列表框中获取所选项目的索引,而列表框为空时,我得到一个错误。

window['Listbox'].get_indexes()[0]
------------------------------------
IndexError: tuple index out of range

我在程序中使用的原始列表不是空的,但它正在发生变化,因此它可能是空的,在这种情况下,当我按下列表框时程序崩溃。

代码:

import PySimpleGUI as sg

list1 = []

layout = [[sg.Listbox(list1, s=(13, 6), enable_events=True, key='Listbox')]]

window = sg.Window("listbox test 1", layout=layout, size=(100, 100))


while True:
    event, values = window.read()
    if event == "Exit" or event == sg.WIN_CLOSED:
        break
    if event == 'Listbox':
        print(window['Listbox'].get_indexes()[0])

是否有一个简单的解决方法?

如果不是,那么我必须添加一个检查列表框是否为空。

【问题讨论】:

  • 你为什么要调用get?该值在值字典中。 values['Listbox'] 具有当前选定的值。 if values['Listbox']: 是您需要检查的所有条目。保持简单。
  • 不会 values['Listbox'] 给我一个字符串吗? (列表中的元素)我正在寻找 intex。
  • ok,那你可以根据原来的选择去查,也可以用get。更重要的一点是,一般来说,在对某物进行索引时总是检查长度。

标签: python python-3.x listbox pysimplegui


【解决方案1】:

这对你有用吗?

if event == 'Listbox':
   try:
      print(window['Listbox'].get_indexes()[0])
   except:
      print("Empty list")

【讨论】:

    【解决方案2】:

    只需要一个 if 语句。

    if values['Listbox']:    # if something was selected
       first_entry = values['Listbox'][0]
       window['Listbox'].get_indexes()[0]  # if you want the index... it'll be safe because values says there are entries
    
    
    

    【讨论】:

    • 如果我尝试: print(values['Listbox'][0]) 当列表框为空时程序崩溃并且我得到这个错误:IndexError: list index out of range 所以这很不幸不能解决我的问题。
    • 这就是为什么必须使用 if 语句来检查是否为空的原因。第一个语句 if 语句很重要,也是解释的重点。这是一种核心概念。尝试有效,因为您仍然收到错误。代码中仍然存在错误。尝试简单地捕获它。
    • 好的,我尝试通过以下方式检查列表框是否为空: if values['Listbox'][0] == '': 但我仍然收到错误消息。
    • 其实应该是if values['Listbox'] == []:,和if values['Listbox']:一样。如果您有一个列表或元组,则只有当它不是空列表或空元组时才能对其进行索引。 [][0] 将得到异常 IndexError: list index out of range
    • 如果不够清楚,values['Listbox'] 的真实性就可以了,那么if len(values['Listbox']): 就可以了。更重要的一点、问题、问题是,除非先添加 if 或某些检查,否则永远无法完成 [0]。
    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2020-05-14
    • 2017-08-04
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多