Мне нужно создать программу с двумя кнопками и меткой, отображающей текущее значение счетчика. Одна кнопка, содержащая текст +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 должна вычесть ее из нее. Счетчик должен начинаться с нуля.
Лучше всего создать класс для счетчика, и, кроме того, лучше всего не создавать 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
Удачи