【问题标题】:Python3+Kivy+Plyer Push notification icon problemPython3+Kivy+Plyer 推送通知图标问题
【发布时间】:2021-11-10 12:04:07
【问题描述】:

我在使用 android 的简单通知测试应用时遇到了一个奇怪的错误。

错误:

python  :  AttributeError: type object 'notification.org.notificator.R$drawable' has no attribute 'icon'

python 文件:

import kivy
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivy.lang import Builder
from plyer import notification
from kivy.uix.screenmanager import ScreenManager


class NotificationScreen(MDScreen):
    def do_notify(self, mode='fancy'):
        title = self.ids.notification_title.text
        message = self.ids.notification_text.text
        ticker = self.ids.ticker_text.text
        app_ico = 'Images/icon.png'

        notification.notify(app_icon=app_ico, title=title, message=message, ticker=ticker, timeout=10)
        #notification.notify(app_icon='Images/icon.ico', title=title, message=message, ticker=ticker, timeout=10)
        #notification.notify(title=title, message=message, ticker=ticker, timeout=10)


class ScreenManagement(ScreenManager):
    pass


view = Builder.load_file('main.kv')


class NotificationDemoApp(MDApp):
    def build(self):
        return view


if __name__ == '__main__':
    NotificationDemoApp().run()

KV 文件:

ScreenManagement:
    id: scrm
    NotificationScreen:
        scrm: scrm

<NotificationScreen>:
    notification_title: notification_title
    notification_text: notification_text
    ticker_text: ticker_text
    MDBoxLayout:
        orientation: 'vertical'
        md_bg_color: 0, 0, 0, 1
        MDBoxLayout:
            orientation: 'horizontal'
            size_hint: 1, None
            md_bg_color: 1, 1, 1, 1
            TextInput:
                id: notification_title
                text: 'Put title here'
                size_hint: 1, None
            TextInput:
                id: notification_text
                text: 'Put message here'
                size_hint: 1, None
            TextInput:
                id: ticker_text
                text: 'New notification'
                size_hint: 1, None
        Button:
            text: 'Toast Notification'
            size_hint: 1, None
            on_release: root.do_notify(mode='toast')
        Button:
            text: 'Simple Notification'
            size_hint: 1, None
            on_release: root.do_notify(mode='normal')
        Button:
            text: 'Fancy Notification'
            size_hint: 1, None
            on_release: root.do_notify(mode='fancy')

buildozer 的基本未注释行:

[app]
title = Notification Example
package.name = notificator
package.domain = notification.org
source.dir = .
requirements = python3,kivy==2.0.0rc4,requests,kivymd,pillow,urllib3,charset_normalizer,idna,plyer
icon.filename = %(source.dir)s/icon.png

我尝试将图标更改为 .ico (两者都在 Images 目录中),但仍然是同样的问题。还尝试从 notify() 函数中删除 app_icon arg,但仍然是同样的问题。还尝试将图标放入根目录和同样的问题。

拜托,我一直在寻找答案,但没有在网上找到任何有用的东西。任何提示或解决方案?谢谢

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    我遇到了同样的问题并找到了问题和解决方法,但不是解决方案:

    问题在于在文件plyer/platforms/android/notification.py 中创建的Drawable Object。如果您print(dir(Drawable)),您将找不到icon 的属性(如错误消息所述)。我不知道为什么缺少 icon 属性,但是您会发现有一个 presplash 属性(这也是一个 .png 文件,因此可以替换)。

    通过将 notification.py 中的第 100 行从 app_icon = Drawable.icon 更改为 app_icon = Drawable.presplash,我可以避开错误并且我的应用程序运行良好。您需要更改正确文件中的行,该文件位于 ProjectName/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/projectname/plyer/platforms/android

    【讨论】:

      【解决方案2】:

      在您的 buildozer.spec 文件中更改要求(如果构建适用于 android)。而不是设置:

      requirements= plyer 
      

      使用:

      requirements= https://github.com/kivy/plyer/archive/refs/heads/master.zip
      

      这应该可以解决问题:)

      【讨论】:

        猜你喜欢
        • 2019-12-31
        • 2016-06-11
        • 2018-06-17
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多