#python #button #reference #kivy
Вопрос:
Некоторая предыстория: Один из моих экранов в моем приложении показывает значение угла в градусах-минутах-секундах. Эти значения являются метками MDL, созданными при входе на экран, и значения зависят от значений полей MDTEXT, заданных пользователем на предыдущем экране. Количество углов зависит от первого экрана, на котором пользователя спрашивают, сколько там точек. Так что, если есть 5 точек, будет 5 углов, каждый из которых будет иметь разные вводимые текстовые данные в градусах-минутах-секундах. Каждый угол представляет собой список с 3 значениями (градусы, минуты и секунды), и каждый угол хранится в списке, называемом углами. Таким образом, это ситуация с 2-D списком, которая помогает мне в расчетах.
Теперь к вопросу: На этом экране моя цель состоит в том, чтобы позволить пользователю регулировать углы, нажимая кнопки и -, чтобы каждое нажатие увеличивало/уменьшало значение секунд на единицу. проблема, с которой я сталкиваюсь, заключается в привязке кнопок к углу, так что, например, если я нажму кнопку второго угла, это добавит только секунду ко второму углу. Я просто не знаю, как написать методы плюс()/минус() таким образом.
class AngleAdjustment(Screen): def on_enter(self, *args): self.adj_angle_widgets = [] self.adj_angles_widgets = [] self.minus_buttons = [] self.plus_buttons = [] angle_number = 0 for angle in angles: angle_number = 1 self.angle_to_adjust_title = MDLabel(text="Angle " str(angle_number), font_size=20, halign="center") #Adds title to each angle self.angle_adjustment_gridlayout = MDGridLayout(cols=5, spacing="10dp", padding="10dp", adaptive_height=True) # Puts everything and angle needs within a gridlayout self.minus_button = MDIconButton(icon="minus-circle", user_font_size="40sp") self.degrees_to_adjust = MDLabel(text=str(angle[0]), halign="center") # Gets user input from previous screen self.minutes_to_adjust = MDLabel(text=str(angle[1]), halign="center") # Gets user input from previous screen self.seconds_to_adjust = MDLabel(text=str(angle[2]), halign="center") # Gets user input from previous screen self.plus_button = MDIconButton(icon="plus-circle", user_font_size="40sp") self.adj_angle_widgets = [int(self.degrees_to_adjust.text), int(self.minutes_to_adjust.text), int(self.seconds_to_adjust.text)] self.adj_angles_widgets.append(self.adj_angle_widgets) self.minus_buttons.append(self.minus_button) self.plus_buttons.append(self.plus_button) self.angle_adjustment_gridlayout.add_widget(self.minus_button) self.angle_adjustment_gridlayout.add_widget(self.degrees_to_adjust) self.angle_adjustment_gridlayout.add_widget(self.minutes_to_adjust) self.angle_adjustment_gridlayout.add_widget(self.seconds_to_adjust) self.angle_adjustment_gridlayout.add_widget(self.plus_button) self.ids.angle_adjustment.add_widget(self.angle_to_adjust_title) # Adding the widgets to the MDBoxLayout written in the KV file self.ids.angle_adjustment.add_widget(self.angle_adjustment_gridlayout) # Adding the widgets to the MDBoxLayout written in the KV file self.minus_button.bind(on_press=self.minus) # Binding the minus button self.plus_button.bind(on_press=self.plus) # Binding the plus button
значения угла ввода пользователем пользователь настраивает значения угла
Ответ №1:
Я действительно смог это выяснить, для справки. Я не знал о опции состояния кнопки — хорошо провел время, читая документацию:
def minus(self, btn): for i in range(N): if self.minus_buttons[i].state == "down": print(f'minus button {i 1} is down') def plus(self, btn): for i in range(N): if self.plus_buttons[i].state == "down": print(f'plus button {i 1} is down')
С этого момента я могу выполнять вычисления, основываясь на том, какая кнопка когда-либо была нажата!