Python 将raspberry pi蓝牙应用程序连接到GUI
我有一个蓝牙脚本,可以让我把手机里的音乐流到车里的树莓皮上。我正在尝试创建一个GUI,允许我通过屏幕上的按钮更改音乐。目前,我可以通过在控制台中键入命令(prev、pause、play、next)来更改音乐,但我希望使用带有屏幕按钮的GUI 问题 我无法将gui连接到主应用程序。gui显示,然后我没有得到音乐输出或音乐作品,但不显示gui 我已经试过了 我曾尝试使用Tkinter和guizero构建GUI(我对GUI不熟悉),但我遇到了与上面相同的问题。 我还尝试过同时构建和运行gui和蓝牙脚本,并将gui打印命令发送到控制台,但也没有成功 蓝牙代码Python 将raspberry pi蓝牙应用程序连接到GUI,python,user-interface,bluetooth,raspberry-pi,Python,User Interface,Bluetooth,Raspberry Pi,我有一个蓝牙脚本,可以让我把手机里的音乐流到车里的树莓皮上。我正在尝试创建一个GUI,允许我通过屏幕上的按钮更改音乐。目前,我可以通过在控制台中键入命令(prev、pause、play、next)来更改音乐,但我希望使用带有屏幕按钮的GUI 问题 我无法将gui连接到主应用程序。gui显示,然后我没有得到音乐输出或音乐作品,但不显示gui 我已经试过了 我曾尝试使用Tkinter和guizero构建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()
蓝牙源代码
主要问题似乎是两者都有自己的事件循环-
mainloop()
和display()
,这两个循环都会阻止所有代码。如果跳过mainloop().run()
并直接使用command=player\u iface.Previous
我尝试过不使用,它会产生错误player\u iface not defined我做了一些调整。我需要添加除油嘴滑舌之外的所有代码。Mainloop()。在gui脚本中运行()。这让我可以调用player\u iface methods。看起来主要的问题是它们都有自己的事件循环-mainloop()
和display()
,这会阻止所有代码。如果跳过mainloop().run()
并直接使用command=player\u iface.Previous
我尝试过不使用,它会产生错误player\u iface not defined我做了一些调整。我需要添加除油嘴滑舌之外的所有代码。Mainloop()。在gui脚本中运行()。这让我可以调用player\u iface方法