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.