Python3+Kivy+Plyer推送通知图标问题
Python3+Kivy+Plyer Push notification icon problem
我在使用 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(图像目录中都有),但仍然是同样的问题。还尝试从 notify() 函数中删除 app_icon arg,但问题仍然存在。还尝试将图标放入根目录和同样的问题。
拜托,我一直在寻找答案,但没有在网上找到任何有用的信息。任何提示或解决方案?谢谢
我遇到了同样的问题并找到了问题和解决方法,但不是解决方案:
问题出在文件 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
.
的正确文件中的行
在您的 buildozer.spec 文件中更改要求(如果构建是针对 android)。而不是设置:
requirements= plyer
使用:
requirements= https://github.com/kivy/plyer/archive/refs/heads/master.zip
这应该可以解决问题:)
我在使用 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(图像目录中都有),但仍然是同样的问题。还尝试从 notify() 函数中删除 app_icon arg,但问题仍然存在。还尝试将图标放入根目录和同样的问题。
拜托,我一直在寻找答案,但没有在网上找到任何有用的信息。任何提示或解决方案?谢谢
我遇到了同样的问题并找到了问题和解决方法,但不是解决方案:
问题出在文件 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
.
在您的 buildozer.spec 文件中更改要求(如果构建是针对 android)。而不是设置:
requirements= plyer
使用:
requirements= https://github.com/kivy/plyer/archive/refs/heads/master.zip
这应该可以解决问题:)