使用单个函数和不同的Kivy按钮更新多个Python变量

时间:2020-03-04 17:06:03

标签: python kivy

我要替换我拥有的7个功能

OLD
def press_saturday(self, *args):
    if self.set_saturday == '0':
        self.set_saturday = '1'
    else:
        self.set_saturday = '0'

具有一个单一功能,可以根据所按下的按钮来更新正确的变量。

NEW
def alarm_wkdy(self, value, day):
    if value == '0':
        value = '1'
    else:
        value = '0'

猕猴桃按钮

OLD
Button:
                id: 'saturday'
                text: "S"
                font_size: 20
                size_hint: .1, .12
                pos_hint: {'x': .65, 'y': 0}
                on_press: root.manager.press_saturday(*args)
                background_color: root.manager.set_saturday, 0, 0, root.manager.set_saturday

NEW
Button:
    id: 'saturday'
    text: "S"
    font_size: 20
    size_hint: .1, .12
    pos_hint: {'x': .75, 'y': 0}
    value: root.manager.set_saturday
    day: 'set_saturday'
    on_press: root.manager.alarm_wkdy(self.value, self.day)
    background_color: root.manager.set_saturday, 0, 0, root.manager.set_saturday

目标是在按下相应按钮时更新self.set_ 任何内容。 请帮忙。谢谢。

2 个答案:

答案 0 :(得分:0)

我建议从函数内部删除全局变量,停止以字符串形式读取'1'和'0'并切换为布尔值否定,而是返回所需的值。看来您想返回开关值1/0以及星期几,所以我将它们作为一个元组返回,如下所示:

class myclass:
    def __init__(self):
        pass

    def alarm_wkdy(self, value, day):
        return (not value, day)

c = myclass()
print(c.alarm_wkdy(True,'Wednesday'))
(False, 'Wednesday')

答案 1 :(得分:0)

我决定不再是笨蛋,而不是调用函数来完成工作,我只是将逻辑放在按钮本身中。

Button:
                id: 'saturday'
                text: "S"
                font_size: 20
                size_hint: .1, .12
                pos_hint: {'x': .75, 'y': 0}
                on_press: root.manager.set_saturday = str((int(root.manager.set_saturday) -1) * -1)
                background_color: root.manager.set_saturday, 0, 0, root.manager.set_saturday