Нужен способ сделать кнопку в Tkinter отключенной, если в списке ничего не выделено - PullRequest
0 голосов
/ 19 октября 2019

Цель кода, который я пишу, состоит в том, чтобы он мог удалять элементы из массива и соответствующего списка. Я надеюсь, что кнопка, которая удаляет элементы, будет ОТКЛЮЧЕНА, если в списке не выделен ни один элемент (поскольку в противном случае возвращается ошибка, когда вы пытаетесь нажать кнопку, и ничего не было выбрано, ошибка отображается ниже.)

>>> Exception in Tkinter callback
  Traceback (most recent call last):
  File "G:\2Boys_stuff\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "H:/The Quiet Apocalypse/Tests/test_13.py", line 14, in remove
    LB = int(lb[0])
IndexError: tuple index out of range

Код, который я использую ниже:

from tkinter import *
import tkinter.messagebox as box

global listbox
TF = True

inventorylist1 = [("Item1","1.0"),("Item2","0.25"),("Item3","0.25")]

def remove():
    global TF
    global listbox

    lb = listbox.curselection()
    LB = int(lb[0])


    del inventorylist1[LB]
    TF = False

    I(TF)

def IR():
    global windowir
    global listbox

    windowir = Tk()
    windowir.title( "IR" )
    windowir.resizable( 0, 0 )

    listframe = Frame( windowir )
    listbox = Listbox( listframe )

    for i in range(len(inventorylist1)):
        e = i+1
        listbox.insert(e, inventorylist1[i])

    Label_ir = Label( listframe, relief = "groove" )
    Label_ir.pack( side = TOP )


    btn_ir_1 = Button( listframe, text = "Remove", command = remove )
    btn_ir_1.pack(side = BOTTOM )

    listbox.pack(side = BOTTOM)
    listframe.pack(padx = 20, pady = 20)

    Label_ir.configure( text = "You are carrying: " )

    windowir.mainloop

def I(Tf):
    global windowir

    if Tf == True:
        windowi = Tk()
        windowi.title( "I" )
        windowi.resizable( 0, 0 )
        IR()
    else:
        windowir.destroy()
        IR()


I(TF)

1 Ответ

0 голосов
/ 19 октября 2019

Просто добавьте try and except и покажите ошибку в виде всплывающего окна, кроме

def remove():
    global TF
    global listbox
    try:
       lb = listbox.curselection()
       LB = int(lb[0])


       del inventorylist1[LB]
       TF = False

       I(TF)
    except:
       popup = Tk()
       popup.wm_title("!")
       label = Label(popup, text=" ERROR")
       label.pack(side="top", fill="x", pady=10)
       B1 = Button(popup, text="Okay", command = popup.destroy)
       B1.pack()
       popup.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...