Преобразование класса Python

1

Мне нужно создать программу с двумя кнопками и меткой, отображающей текущее значение счетчика. Одна кнопка, содержащая текст +1, должна добавить один к счетчику, а другая кнопка, обозначенная -1, должна вычесть ее из нее (минимальное и максимальное значение не существует). Счетчик должен начинаться с нуля.

При проектировании функций для каждой кнопки нам нужно получить текущее значение, изменить значение в зависимости от нажатия кнопки, а затем установить новое значение.

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

Я работал и после долгих проб и ошибок, я получил его работу следующим образом:

from tkinter import *
from tkinter.ttk import *

def plus_one():
    """Increments counter by 1 """
    global click_counter, counter_label

    click_counter += 1
    counter_label["text"] = str(click_counter)

def minus_one():
    """Reduces counter value by 1"""
    global click_counter, counter_label

    click_counter -= 1
    counter_label["text"] = str(click_counter)

def main():
    """Program"""
    global click_counter, counter_label
    click_counter = 0
    window = Tk()

    counter_label = Label(window, text=str(click_counter))
    counter_label.grid(row=0, column=0)

    plus_one_button = Button(window, text="+1", command=plus_one)
    plus_one_button.grid(row=2, column=0)
    minus_one_button = Button(window, text="-1", command=minus_one)
    minus_one_button.grid(row=2, column=1)

    window.mainloop()

main()

Мне было интересно, можно ли инкапсулировать код GUI в класс Countergui следующим образом:

from tkinter import *
from tkinter.ttk import *

# Write your code here

def main():
    """Set up the GUI and run it"""
    window = Tk()
    counter_gui = CounterGui(window)
    window.mainloop()

main()

Дополнительная информация: воссоздайте программу, но инкапсулируйте код GUI в класс CounterGui. Эта программа должна иметь все те же функциональные возможности, что и программа в вопросе 4: программа имеет две кнопки и метку, отображающую текущее значение счетчика. Одна кнопка с текстом +1 должна добавить один к счетчику, а другая кнопка с надписью -1 должна вычесть ее из нее. Счетчик должен начинаться с нуля.

Теги:
python-3.x

1 ответ

1

Лучше всего создать класс для счетчика, и, кроме того, лучше всего не создавать globals если вы можете его избежать.

class Counter(object):
    def __init__(self, start=0):
        self.count = start

    def increment(self):
        self.count += 1

    def decrement(self):
        self.count -= 1

Лучше не создавать смешанный класс использования - этот класс позаботится об обработке хранилища, приращении и уменьшении ваших значений.

Затем вы можете создать отдельный класс, чтобы нарисовать кнопки и базовый компонентный интерфейс и передать ему экземпляр вашего класса Counter

Удачи

  • 2
    Я немного смущен. Можете ли вы помочь мне понять код. Я понимаю часть "не создавать глобалы". Но я рисую пробел, когда пытаюсь выработать код для инкапсуляции GUI как класса.
  • 1
    Глобальные переменные - это хороший способ создать проблемы для себя, особенно если вы хотите, чтобы вы определили это в другом месте, и вы повторно используете имя переменной - для класса GUI, я не уверен, почему вы пытаетесь инкапсулировать его как класс
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню