Сбой кода Tkinter (python) без ошибок - PullRequest
0 голосов
/ 21 апреля 2020

Это код, который я пытался выполнить, и он работает хорошо, когда я нажимаю на кнопку 55 раз, но на 56 попытках происходит сбой. Я не могу понять, почему это так. помогите пожалуйста, почему происходит сбой и как это решить. Я пытался сделать доску тамбола, используя tkinter. и я должен использовать tkinter

from tkinter import *
import random

main_var = []
done_var = []

for a in range(1, 91):
    main_var.append(a)


def board():
    increas = 1
    for x in range(10, 495, 55):
        for y in range(10, 700, 70):
            frame = Frame(
                master=window,
                relief=RAISED,
                borderwidth=2,
                bg="orange"

            )
            frame.place(x=y, y=x)
            num_label = Label(master=frame, text=increas, borderwidth=2, bg="orange", fg="white", height=3,
                              width=9)
            num_label.pack()
            increas += 1


def num_generate():

    random_num = random.choice(main_var)
    num.set(random_num)
    print(random_num)
    main_var.remove(random_num)
    done_var.append(random_num)
    increas = 1
    for x in range(10, 495, 55):
        for y in range(10, 700, 70):
            if increas in done_var:
                frame = Frame(
                    master=window,
                    relief=RIDGE,
                    borderwidth=2,
                    bg="green"

                )
                frame.place(x=y, y=x)
                num_label = Label(master=frame, text=increas, borderwidth=2, bg="green", fg="white", height=3,
                                  width=9)
                num_label.pack()
                increas += 1

            else:
                frame = Frame(
                    master=window,
                    relief=RAISED,
                    borderwidth=2,
                    bg="orange"

                )
                frame.place(x=y, y=x)
                num_label = Label(master=frame, text=increas, borderwidth=2, bg="orange", fg="white", height=3,
                                  width=9)
                num_label.pack()
                increas += 1


# initialising
window = Tk()
window.geometry("1000x1000")
window.title("Tambola Game")


# for adding values from 1 to 90


# board function
board()


# Number Generator and marking on board
num = StringVar()
num_generate = Button(text="Generate", height=3, width=70, bg="red", fg="white", command=num_generate)
num_generate.place(x=770, y=500)
Label(textvariable=num, fg="dark blue", font="Algerian 200 bold").place(x=855, y=100)

# Orange = Not done, Green = Done
user_tell = Frame(relief=GROOVE, borderwidth=2)
user_tell.place(x=10, y=550)
label = Label(user_tell, text="PENDING NUMBERS", bg="Orange", width=25, fg="black", font="Verdana")
label.pack()
label = Label(user_tell, text="CALLED NUMBERS", bg="green", width=25, fg="black", font="Verdana")
label.pack()

# offers menu


window.mainloop()

1 Ответ

1 голос
/ 21 апреля 2020

Это не сбой без ошибки, это вызывает следующее исключение: Cannot choose from an empty sequence.

Это означает, что main_var пуст (вы удалили каждый элемент из него). Вы должны проверить это, прежде чем пытаться удалить элемент:

def num_generate():

    if len(main_var) > 0:
        random_num = random.choice(main_var)
        num.set(random_num)
        print(random_num)
        main_var.remove(random_num)

    else:
        # do something else

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...