Seite 1 von 1
PyQt5.QtBluetooth
Verfasst: Samstag 11. Januar 2020, 20:30
von Schlaaaange
Hallöchen Python-Scripter,
ich arbeite mich mit Python und dem QT-Framework ein.
Ich würde auch gerne PyQt5.QtBluetooth nutzen.
Dies scheint aber nur unter Linux zu funktionieren.
Unter Windows und Mac funktioniert QTBluetooth nicht.
Auf was greift QT5 dort zu?
Es gibt unter MacOS ja sogar ein eigenes Bluetooth-Framework.
Eigentlich sollte QT dies ja nutzen, oder ?
Hat hier jemand Erfahrung?
Re: PyQt5.QtBluetooth
Verfasst: Samstag 11. Januar 2020, 20:48
von sparrow
Ich habe damit noch nicht gearbeitet aber die
Dokumentation sagt anderes.
Re: PyQt5.QtBluetooth
Verfasst: Samstag 11. Januar 2020, 20:54
von Schlaaaange
Ja, aber mit PyQt5 scheint es nicht zu funktionieren.
Zumindest funktioniert es bei mir nur unter Linux.
Mit C++ habe ich es noch nicht getestet.
Re: PyQt5.QtBluetooth
Verfasst: Samstag 11. Januar 2020, 21:17
von Schlaaaange
Wie bekomme ich beim Device scannen einen Core-EventLoop hin ?
(Für die Delegates)
So:
os.environ['QT_EVENT_DISPATCHER_CORE_FOUNDATION'] = '1'
Unter MacOS tut sich etwas, aber man findet halt sehr wenig Python-Material zu diesem Thema und muss daher stark mit der C++ Doku arbeiten.
Mal sehen ob ich es hinbekomme.
Re: PyQt5.QtBluetooth
Verfasst: Samstag 11. Januar 2020, 21:50
von Schlaaaange
Außerdem muss man Einiges in dieser Richtung mit SUDO-Rechten testen.
Re: PyQt5.QtBluetooth
Verfasst: Samstag 11. Januar 2020, 21:56
von sparrow
Man muss bei Qt immer mit der C++ Dokumentation arbeiten. PyQt bzw. Pyside sind ja auch nur Wrapper für die entsprechenden Schnittstellen.
Re: PyQt5.QtBluetooth
Verfasst: Samstag 11. Januar 2020, 22:45
von Schlaaaange
Das hier:
Code: Alles auswählen
#!/usr/bin/env python
import signal
import sys
import os
from PyQt5.QtCore import QCoreApplication, QTimer
from PyQt5.QtBluetooth import QBluetoothLocalDevice, QBluetoothDeviceDiscoveryAgent, QBluetoothDeviceInfo
class Application(QCoreApplication):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.dev = QBluetoothDeviceInfo()
self.dlist = []
self.counter = 0
self.localDevice = QBluetoothLocalDevice()
print(self.localDevice.name())
self.scan_for_devices()
self.exec()
def display_status(self):
d = 0
#print(self.agent.isActive(), self.agent.discoveredDevices())
def fin(self, *args, **kwargs):
self.agent.stop()
self.dlist = self.agent.discoveredDevices()
while self.counter < len(self.dlist):
print(self.dlist[self.counter].name())
self.counter += 1
os.environ['QT_EVENT_DISPATCHER_CORE_FOUNDATION'] = '0'
sys.exit(0)
def err(self, *args, **kwargs):
print("Ein Fehler ist aufgetretten.")
def scan_for_devices(self):
self.agent = QBluetoothDeviceDiscoveryAgent(self)
#self.agent.deviceDiscovered.connect(self.fin)
self.agent.finished.connect(self.fin)
self.agent.error.connect(self.err)
self.agent.setLowEnergyDiscoveryTimeout(1000)
#self.agent.discoveredDevices()
self.agent.start()
timer = QTimer(self.agent)
timer.start(500)
timer.timeout.connect(self.display_status)
if __name__ == '__main__':
import sys
os.environ['QT_EVENT_DISPATCHER_CORE_FOUNDATION'] = '1'
app = Application(sys.argv)
muss doch auch eleganter gehen.