我有一个蓝牙脚本,可以将音乐从手机流式传输到车上的树莓派。我正在尝试创建一个GUI,该GUI允许我通过屏幕上的按钮更改音乐。目前,我可以通过在控制台中键入命令来更改音乐(上一个,暂停,播放,下一个),但是我想使用带有屏幕按钮的GUI
问题
我无法将gui连接到主应用程序。 gui显示,然后我听不到音乐或音乐作品的输出,但不显示GUI
我尝试过
我尝试使用Tkinter和guizero构建GUI(我是GUI的新手),但是遇到了与上述相同的问题。 我还尝试过同时构建和运行gui和蓝牙脚本,并将GUI打印命令发送到控制台,但这还是行不通的
蓝牙代码
import dbus, dbus.mainloop.glib, sys
from gi.repository import GLib
def on_property_changed(interface, changed, invalidated):
if interface != 'org.bluez.MediaPlayer1':
return
for prop, value in changed.iteritems():
if prop == 'Status':
print('Playback Status: {}'.format(value))
elif prop == 'Track':
print('Music Info:')
for key in ('Title', 'Artist', 'Album'):
print(' {}: {}'.format(key, value.get(key, '')))
def on_playback_control(fd, condition):
str = fd.readline()
if str.startswith('play'):
player_iface.Play()
elif str.startswith('pause'):
player_iface.Pause()
elif str.startswith('next'):
player_iface.Next()
elif str.startswith('prev'):
player_iface.Previous()
return True
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
obj = bus.get_object('org.bluez', "/")
mgr = dbus.Interface(obj, 'org.freedesktop.DBus.ObjectManager')
for path, ifaces in mgr.GetManagedObjects().iteritems():
adapter = ifaces.get('org.bluez.MediaPlayer1')
if not adapter:
continue
player = bus.get_object('org.bluez',path)
player_iface = dbus.Interface(
player,
dbus_interface='org.bluez.MediaPlayer1')
break
if not adapter:
sys.exit('Error: Media Player not found.')
bus.add_signal_receiver(
on_property_changed,
bus_name='org.bluez',
signal_name='PropertiesChanged',
dbus_interface='org.freedesktop.DBus.Properties')
GLib.io_add_watch(sys.stdin, GLib.IO_IN, on_playback_control)
GLib.MainLoop().run()
使用guizero的简单GUI的代码
from guizero import App, PushButton
app = App()
def prev():
print("prev")
prev_button = PushButton(app, command=prev, text="PREV")
app.display()
蓝牙代码源 https://scribles.net/controlling-bluetooth-audio-on-raspberry-pi/