python - 将动态创建的按钮引用到相应的标签 Kivy Python
问题描述
一些背景:我的应用程序中的一个屏幕以度分秒为单位显示角度值。这些值是在您进入屏幕时创建的 MDLabel,这些值取决于用户在前一个屏幕中给出的 MDTextFields 值。角度的数量取决于询问用户有多少点的第一个屏幕。因此,如果有 5 个点,就会有 5 个角度,每个角度都有不同的度-分-秒文本输入。每个角度都是一个包含 3 个值(度、分和秒)的列表,每个角度都存储在一个称为角度的列表中。所以这是一个二维列表情况,可以帮助我进行计算。
现在问题来了:在这个屏幕上,我的目标是让用户通过按 + 和 - 按钮来调整角度,以便每次按下都会将秒值增加/减少 1。我遇到的问题是将按钮引用到角度 - 例如,如果我按下第二个角度的 + 按钮,它只会在第二个角度增加一秒。我只是不知道如何以这种方式编写 plus()/minus() 方法。
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
解决方案
我实际上能够弄清楚这一点,供任何人参考。我不知道按钮状态选项 - 阅读文档很愉快:
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')
从这里开始,我可以根据单击的按钮进行计算!
推荐阅读
- django - 使用 where 子句在 Django 上进行内部连接?
- json - Eclipse Ditto - 创建 MQTT 连接 - 因无效 json 400 响应而失败
- c# - 为什么 Resharper 告诉我可能存在 NullReferenceException?
- c - 如何实现分页,并在知道虚拟地址的情况下找到物理内存地址
- powershell - Powershell - 导出证书信息
- c# - 由于对象的当前状态(System.Text.Json),操作无效
- sql - 如何确保在雪花中使用 mode() 的查询的确定性结果
- mysql - MySQL:如何执行包括计算总和的多表查询?
- swift - 如何从文本中提取href并让它可点击到网站?
- python - CMake:custom_target 参数转发到特定命令