Python如何影响运行计划



按钮开始警报开始响起警报。我想停止按按钮停止铃声>停止警报。我不知道会影响跑步程序。我必须如何维修功能 stop_alarm

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
import winsound
class ControlPanel(BoxLayout):
    def __init__(self, **kwargs):
        # make sure we aren't overriding any important functionality
        super(ControlPanel, self).__init__(**kwargs)
        self.alarm_status = True
        self.orientation = "vertical"
        butOn = Button(text = "Start alarm: ", on_release = self. start_alarm)
        butStop = Button(text = "Stop alarm: ", on_release = self.stop_alarm)
        self.add_widget(butOn)
        self.add_widget(butStop)
    def start_alarm(self, obj):
        while self.alarm_status == True:
            winsound.PlaySound("alarm.wav", winsound.SND_FILENAME)
    def stop_alarm(self, obj):
        self.alarm_status = False
class LifeApp(App):
    def build(self):     
        return ControlPanel()
if __name__ == '__main__':
    LifeApp().run()

代码的主要问题是您在主GUI线程上有一个段循环。因此

对于下次无法播放警报,您没有将Alarm_status标志设置为True。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
import time
import winsound
import threading
class ControlPanel(BoxLayout):
    def __init__(self, **kwargs):
        # make sure we aren't overriding any important functionality
        super(ControlPanel, self).__init__(**kwargs)
        self.alarm_status = True
        self.orientation = "vertical"
        butOn = Button(text = "Start alarm: ", on_release = self.start_thread)
        butStop = Button(text = "Stop alarm: ", on_release = self.stop_alarm)
        self.add_widget(butOn)
        self.add_widget(butStop)
    def start_alarm(self, obj):
        while self.alarm_status == True:
            winsound.PlaySound("alarm.wav", winsound.SND_FILENAME)
        #Set Alarm_Status True so that next time it works
        self.alarm_status = True
    def stop_alarm(self, obj):
        self.alarm_status = False
    #Function to run your start_alarm on a different thread
    def start_thread(self,obj):
        t1 = threading.Thread(target=self.start_alarm,args=(obj,))
        t1.start()
class LifeApp(App):
    def build(self):     
        return ControlPanel()
if __name__ == '__main__':
    LifeApp().run()

希望这会有所帮助!

最新更新