Как бы я изменил свои функции на классы? - PullRequest
0 голосов
/ 06 мая 2019

Я работаю над курсовой для моего универа (программы с графическим интерфейсом) и сталкиваюсь с проблемой, так как мой код работает, но спецификация такова, что мы используем ООП вместо просто функций, и я потерян.

Я пытался создавать новые классы для каждой кнопки, но я не знаю, как заставить их работать так же, как в функциях.

def add():
    #get input
    task=txt_input.get()
    if task !="":
        tasks.append(task)
        #updating the list box
        update_listbox()
    else:
        display["text"]=("Input a task.")

    with open("ToDoList.txt", "a") as f:
        f.write(task)
        f.close()

txt_input=tk.Entry(root, width=25)
txt_input.pack(pady=15)

add=tk.Button(root, text="Add", fg="DarkOrchid3", bg="blanched almond", command=add)
add.pack(pady=5, ipadx=15)

Это позволяет пользователю добавить задачу в свой список дел в графическом интерфейсе, но, как я уже сказал, следует использовать ООП, а не функции. Если я пойму это, я смогу выполнить остальные кнопки.

UPDATE: Итак, я попробовал решение, приведенное ниже, и я действительно не знаю, что не так с моим кодом, GUI появляется, но функции добавления не будут работать.

class ToDoList():
    def __init__(self):
        self.tasks = []

    def update_listbox(self):
        #calling clear function to clear the list to make sure tasks don't keep on adding up
        clear()
        for task in self.tasks:
            box_tasks.insert("end", task)

    def clear(self):
        box_tasks.insert("end", task)

class adding():

    def add(self):
        task=txt_input.get()
        if task!="":
            self.tasks.append(task)
            update_listbox()
        else:
            display["text"]=("Input a task")

1 Ответ

1 голос
/ 06 мая 2019

Непонятно, что имел в виду ваш учитель об использовании классов. Я собираюсь догадаться, что они хотят, чтобы вы создали объект «список задач», который имеет методы для добавления и удаления задач. Я не знаю, хотят ли они, чтобы GUI был частью этого класса или нет. Возможно, все ваше приложение состоит из классов, или вы можете использовать класс только для бизнес-логики.

Я думаю, вам следует начать с создания класса только для бизнес-логики. Это будет выглядеть примерно так:

class ToDoList():
    def __init__(self):
        self.the_list = []
    def add(self, value):
        <code to add the value to self.the_list>
    def remove(self, item):
        <code to remove a value from self.the_list>

При этом вы можете написать простую небольшую программу без графического интерфейса, которая упрощает проверку логики:

# create an instance of the to-do list
todo_list = ToDoList() 

# add two items:
todo_list.add("mow the lawn")
todo_list.add("buy groceries")

# delete the first item:
todo_list.remove(0)

Чтобы построить GUI поверх этого, вы можете либо добавить компонент GUI в существующий класс, либо создать новый класс специально для GUI. У каждого есть свои плюсы и минусы.

В следующем примере GUI - это отдельный класс, который использует класс ToDoList для обслуживания данных. Этот дизайн позволяет вам повторно использовать основную логику списка задач в тестах, в графическом интерфейсе и даже в веб-приложении или, возможно, даже в мобильном приложении.

class ToDoGUI():
    def __init__(self):
        # initalize the list
        self.todo_list = ToDoList()

        # initialize the GUI
        <code to create the entry, button, and widget to show the list>

    def add(self):
        # this should be called by your button to the list
        data = self.entry.get()
        self.todo_list.add(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...