微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PySide2中发现蓝牙设备时如何显示旋转的圆?

如何解决在PySide2中发现蓝牙设备时如何显示旋转的圆?

背景

我正在使用PySide2创建一个应用程序以连接到我的Arduino蓝牙汽车。我正在使用PyBluez来发现并连接到设备(HC-06)。

我保持bluetooth.discover_divices()认持续时间不变(8秒),所以当它扫描设备时,我想显示一个旋转的“加载”小部件。我在this问题中找到了解决方法,因此我通过以下方式实现了该应用。


实施

from pyside2.QtWidgets import (
    QApplication,QMainWindow,QAction,QDialog,QDialogButtonBox,QVBoxLayout,QLabel,QPushButton
)

from pyside2.QtGui import QIcon,QMovie
from pyside2.QtCore import Qt
import bluetooth
import sys

def connectDevice():
    def scan():
        btStart.setEnabled(False)
        btWait.setVisible(True)
        btWaitAnimation.start()

        btDevices = bluetooth.discover_devices(lookup_names=True)
        print(btDevices)

        btStart.setEnabled(True)
        btWait.setVisible(False)
        btWaitAnimation.stop()

    btWaitAnimation = QMovie("path/to/wait.gif")

    btLabel = QLabel("Select Device")
    btLabel.setAlignment(Qt.AlignHCenter)

    btStart = QPushButton("Scan For Devices")
    btStart.clicked.connect(scan)

    btWait = QLabel()
    btWait.setMovie(btWaitAnimation)
    btWait.setAlignment(Qt.AlignHCenter)

    btButtons = QDialogButtonBox(QDialogButtonBox.Cancel)
    btButtons.addButton("Connect",QDialogButtonBox.AcceptRole)

    btLayout = QVBoxLayout()
    btLayout.addWidget(btLabel)
    btLayout.addWidget(btStart)
    btLayout.addWidget(btWait)
    btLayout.addWidget(btButtons)

    btDialog = QDialog(win)
    btDialog.setwindowTitle("Smart Car - Connect Device")
    btDialog.setLayout(btLayout)
    btDialog.resize(200,300)

    btDialog.open()
    btButtons.rejected.connect(btDialog.close)


app = QApplication(sys.argv)
win = QMainWindow()

win.setwindowTitle("Smart Car")
win.setwindowIcon(QIcon("path/to/smartcardesktop.png"))
win.resize(800,600)

menuBar = win.menuBar()

fileMenu = menuBar.addMenu("Edit")

connectAction = QAction(
    QIcon("path/to/connect.png"),"Connect to Device"
)

connectAction.setShortcut("Ctrl+Shift+C")
connectAction.triggered.connect(connectDevice)

win.show()

if __name__ == "__main__":
    app.exec_()

预期

单击菜单操作>出现的对话框>单击“扫描设备”>在按钮下方出现旋转的圆> 8秒后,圆消失,应用程序将打印找到的设备。


实际

单击菜单操作>出现的对话框>单击“扫描设备”> 8秒钟没有任何反应> 8秒钟后,该应用程序将打印找到的设备,但没有圆圈。

如果在scan(最后三行)中打印了蓝牙设备后删除了零件,则在打印蓝牙设备后,圆圈会出现并一直旋转。

所以就像

btDevices = bluetooth.discover_devices(lookup_names=True)
print(btDevices)

部分在执行之前

btStart.setEnabled(False)
btWait.setVisible(True)
btWaitAnimation.start()

问题

我该如何解决

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。