将树莓派蓝牙应用程序连接到GUI

时间:2020-01-05 12:25:35

标签: python user-interface bluetooth raspberry-pi

我有一个蓝牙脚本,可以将音乐从手机流式传输到车上的树莓派。我正在尝试创建一个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/

0 个答案:

没有答案