• BeeWare开发安卓app科目三灯光模拟器


    源代码

    app.py中的完整代码如下所示:

    """
    My first application
    """
    import toga
    from winsound import PlaySound, SND_FILENAME
    import random
    import asyncio
    from toga.style import Pack
    from toga.style.pack import COLUMN, ROW
    
    
    class HelloWorld(toga.App):
    
        def startup(self):
            """
            Construct and show the Toga application.
    
            Usually, you would add your application to a main content box.
            We then create a main window (with a name matching the app), and
            show the main window.
            """
            main_box = toga.Box(style=Pack(direction=COLUMN))
    
            name_label = toga.Label(
                'Your name:',
                style=Pack(padding=(0, 5))
            )
    
            self.name_input = toga.TextInput(style=Pack(flex=1))
            name_box = toga.Box(style=Pack(direction=ROW, padding=5))
            name_box.add(name_label)
            name_box.add(self.name_input)
    
            button0 = toga.Button(
                '加油',
                on_press=self.encourage,
                style=Pack(padding=5)
            )
    
            button1 = toga.Button(
                '模拟夜间灯光使用考试',
                on_press=self.test,
                style=Pack(padding=5)
            )
    
            main_box.add(name_box)
            main_box.add(button0)
            main_box.add(button1)
    
            self.main_window = toga.MainWindow(title=self.formal_name)
            self.main_window.content = main_box
            self.main_window.show()
    
        def encourage(self, widget):
            if self.name_input.value:
                name = self.name_input.value
            else:
                name = '老司机'
    
            self.main_window.info_dialog(
                "Hello,{}".format(name),
                "逢考必过!",
            )
    
        def test(self, widget):
    
            # await asyncio.sleep(50)
            filename = "F:/BeeWareProject/helloworld/Light_emulator/src/Light_emulator/record/" + str(0) + ".wav"
            PlaySound(filename, SND_FILENAME)
    
            filename = "F:/BeeWareProject/helloworld/Light_emulator/src/Light_emulator/record/" + str(1) + ".wav"
            PlaySound(filename, SND_FILENAME)
    
            for i in range(1, 4):
                # 需保证每次产生的随机数不同
                random.seed()
                num = random.randint(2, 14)
                filename = "F:/BeeWareProject/helloworld/Light_emulator/src/Light_emulator/record/" + str(num) + ".wav"
                PlaySound(filename, SND_FILENAME)
    
            filename = "F:/BeeWareProject/helloworld/Light_emulator/src/Light_emulator/record/" + str(15) + ".wav"
            PlaySound(filename, SND_FILENAME)
    
    
    def main():
        return HelloWorld()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    设计思路

    一个文本输入框,用来输入使用者姓名,若未输入,默认值为“老司机”,
    两个按钮:
    按钮0名为“加油”,按下后,会弹出一个子窗口:Hello,使用者,逢考必过!
    按钮1名为“模拟夜间灯光使用考试”,按下后,开始后播放测试音频。前奏和请开启前照灯是一定播放;其余音频使用for循环,随机播放,共播放3条;最后播放结束语。

    问题

    1

    按钮1的回调函数中需要执行的时间较长,在播放测试内容时3,如果要退出app,则无法响应。
    拟使用异步编程的方法解决,将按钮1的回调函数test的定义def修改为async def,在函数中加入await asyncio.sleep(50),即在回调函数执行过程中挂起,去执行其他,等到挂起条件(假设挂起条件是sleep(5))消失后,也就是5秒到了再回来执行。但未修改任何代码,用手机接完电话回来asyna和await突然就不生效了。

    2

    将打包好的app发送到手机上安装完成后,打开闪退。

    追加

    尝试把winsound换成playsound,无果

    some feelings

    一个感觉蛮简单的项目还是做了挺久的,记录一下目前的进度,会搁置一段时间,后面再来调,毕竟半途而废不好。

  • 相关阅读:
    【Java】Java 高频面试题英语版(1)
    C++对引用和指针的理解、应用
    CobaltStrike 流量隐藏
    1819_ChibiOS的互斥信号与条件变量
    HDMI ——CEC 协议详解以及待机唤醒 实现
    【性能优化下】组织结构同步优化二,全量同步/增量同步,断点续传实现方式
    CAS机制的的解释和总结
    02目标检测-传统检测方法
    11-JavaSE基础巩固练习:面向对象综合训练(文字版格斗游戏、对象数组练习)
    RK3399平台开发系列讲解(PCI/PCI-E)5.55、PCIE RC枚举EP过程
  • 原文地址:https://blog.csdn.net/ZNJIAYOUYA/article/details/126553912