Как я могу удалить / забыть / уничтожить набор радиокнопок, которые были созданы с помощью цикла for из списка? - PullRequest
0 голосов
/ 01 апреля 2019

Я учитель, делающий базовый мини-клиент Steam в качестве учебного упражнения для моего урока программирования. Мы используем Python и tkinter.

Программа генерирует два набора переключателей. Первая - это «библиотека игр» пользователей, где они могут выбрать игру для игры (при выборе радиокнопки ничего не происходит, кроме метки, информирующей пользователя о том, что игра собирается запустить). Второй набор переключателей позволяет пользователям выбрать новую игру для «покупки». Оба набора переключателей создаются с помощью цикла for и списка.

Проблема: То, что я хочу сделать, это сделать так, чтобы, если вы выбираете игру для «покупки», она добавляется в список user_library, затем уничтожаете / забываете оригинальный набор переключателей библиотеки игр, а затем восстанавливаете переключатели с помощью цикла for. Это также должно сделать кнопку для только что добавленной игры.

Код "забудьте", который я пробовал, только скрывает / удаляет последнюю кнопку raido, сгенерированную циклом for.

Примечание: радиокнопки используются в демонстрационных целях, я понимаю, что выпадающее меню было бы лучше.

Я планировал сделать это с помощью метода, который был связан с кнопкой покупки.

  1. Метод сначала добавит список user_library с новым названием игры. 2. Затем уничтожьте / забудьте переключатели пользовательской библиотеки, которые были сгенерированы циклом for при первом запуске программы. 3. Используйте другой цикл for для воссоздания переключателей пользовательской библиотеки.

Когда я запускаю программу, «забытый» код, который я пробовал, только скрывает / удаляет последнюю raidobutton, сгенерированную циклом for.

Код ниже сокращен, но должен показывать, что я пытаюсь сделать. Мне удобно добавлять списки, но я не понимаю, почему забывают только последнюю кнопку-переключатель.

Я открыт для лучших способов решения проблемы

libraryGames=["The Witcher 3: Wild Hunt GOTE", "Jurassic World: Evolution", "Red Dead Redemption 2","Mass Effect Trilogy","Subnautica",]

saleGames=["SteamPunk 2077", 29.99, "Fallout 3", 3.99, "Warcraft 4: About dam time", 69.99, "Lego: Terminator", 19.99, "Homework simulator", 14.99]

def __init__(self, parent):
     #list that created the library game buttons

     for games in range (0, len (libraryGames)):
            rb = Radiobutton(frame1, variable = self.library_game, bg = 
            "#000000",fg="#ffffff", value = games, text = 
            libraryGames[games],command = self.library_choice)
            rb.grid(row = libraryrow, column=0, columnspan = 2,padx=25, 
            sticky=W,)
            libraryrow+=1

     #list that created the sale game buttons

     for items in range (0, len (saleGames),2):
            rb2 = Radiobutton(frame2, variable = self.sale_game, bg = 
            "#000000",fg="#ffffff",value = items, text = 
            saleGames[items],command = self.sale_choice)
            rb2.grid(row = salerow, column=0, columnspan = 2,padx=25, 
            sticky=W,)
            salerow+=1

#method that removes the radio buttons generated by the first loop when a purchase button is clicked.

def purchase(self):
        rb.grid_forget()
        # I would then add the loop code to create the radio buttons again

1 Ответ

1 голос
/ 01 апреля 2019

Сначала создайте список для удержания переключателей, а затем переберите список до grid_forget их при необходимости.

import tkinter as tk

root = tk.Tk()

libraryGames=["The Witcher 3: Wild Hunt GOTE", "Jurassic World: Evolution", "Red Dead Redemption 2","Mass Effect Trilogy","Subnautica",]

class GUI:
    def __init__(self, parent):
        frame1 = tk.Frame(parent)
        frame1.pack()
        self.holder_list = []

        for num,game in enumerate(libraryGames):
            rb = tk.Radiobutton(frame1, bg="#000000",fg="#ffffff",
                                value=game, text=game,command= "",selectcolor="grey")
            rb.grid(row = num, column=0, columnspan = 2,padx=25,sticky=tk.W,)
            self.holder_list.append(rb)

        frame2 = tk.Frame(parent)
        frame2.pack()
        tk.Button(frame2,text="Purchased",command=self.purchase).pack()

    def purchase(self):
        print (self.holder_list)
        for widget in self.holder_list:
            widget.grid_forget()

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