本文使用ps4手柄旨在控制机器人行走,故只获取了手柄的部分信息。
硬件:PS4手柄
环境:win7/10,python3.7,opencv4.0,Pyqt5,pygame,time,math,sys

一、使用pygame库获取手柄信息

主要代码如下:

import pygame
import time
import numpy as np
import math
import sys
class JoyStick(object):def __init__(self, id):pygame.init()pygame.joystick.init()if pygame.joystick.get_count() == 0:raise Exception("Joystick not found!")self.joystick = pygame.joystick.Joystick(id)self.joystick.init()self.axis = np.zeros(self.joystick.get_numaxes())self.__alpha = 0.0self.button = [self.joystick.get_button(i) for i in range(self.joystick.get_numbuttons())]self.hat = [self.joystick.get_hat(i) for i in range(self.joystick.get_numhats())]self.lst_button = [self.joystick.get_button(i) for i in range(self.joystick.get_numbuttons())]self.lst_hat = [self.joystick.get_hat(i) for i in range(self.joystick.get_numhats())]self.button_click = self._check_button_click(self.lst_button, self.button)self.hat_click = self._check_hat_click(self.lst_hat, self.hat)self.dead_zone = 0.1@staticmethoddef _check_button_click(lst, cur):rise = [0] * len(lst)for i in range(len(lst)):if not lst[i] and cur[i]:rise[i] = 1return rise@staticmethoddef _check_hat_click(lst, cur):rise = [(0, 0)] * len(lst)for i in range(len(lst)):h0 = 1 if not lst[i][0] and cur[i][0] else 0h1 = 1 if not lst[i][1] and cur[i][1] else 0rise[i] = (h0, h1)return rise@staticmethoddef count():pygame.init()return pygame.joystick.get_count()@staticmethoddef device_name(id):if id < JoyStick.count():return pygame.joystick.Joystick(id).get_name()else:return Nonedef name(self):return self.joystick.get_name()def refresh(self):pygame.event.pump()for i in range(self.joystick.get_numaxes()):axis = self.joystick.get_axis(i)self.axis[i] = self.axis[i] * self.__alpha + axis * (1.0 - self.__alpha)if -self.dead_zone < self.axis[i] < self.dead_zone:self.axis[i] = 0self.lst_button = self.buttonself.lst_hat = self.hatself.button = [self.joystick.get_button(i) for i in range(self.joystick.get_numbuttons())]self.hat = [self.joystick.get_hat(i) for i in range(self.joystick.get_numhats())]self.button_click = self._check_button_click(self.lst_button, self.button)self.hat_click = self._check_hat_click(self.lst_hat, self.hat)class PS4Robot(object):def __init__(self, id=0):self.ps4 = JoyStick(id)if self.ps4.name().find("PS4") < 0:raise Exception("No a PS4 handle")self.dx = 0.0self.dy = 0.0self.step = 0.0self.yaw = 0.0self.speed = 0.0def refresh(self):self.ps4.refresh()x = self.ps4.axis[2]y = -self.ps4.axis[3]xy = math.sqrt(x * x + y * y)if xy < 0.1:self.dx = 0.0self.dy = 0.0self.step = 0.0else:self.dx = x / xyself.dy = y / xyself.step = max(math.fabs(x), math.fabs(y))self.yaw = self.ps4.axis[0]if self.ps4.button_click[3]:self.speed += 0.1elif self.ps4.button_click[0]:self.speed -= 0.1self.speed = min(1.0, max(0.0, self.speed))msg_list=[]msg_list.append(self.dx)msg_list.append(self.dy)msg_list.append(self.step)msg_list.append(self.yaw)msg_list.append(self.speed)return msg_list# print("Yaw = %3.1f" % self.yaw)# print("Speed = %3.1f" % self.speed)

二、QT界面绘制以及程序生成

使用QT Designer绘制好界面,然后保存为.ui文件,最后将.ui生成.py文件导入程序中即可使用。
QT Designer软件界面如下:

使用命令行pyuic5 -o login.py login.ui转换成.py文件。调用格式为pyuic5 -o {输出文件名} {输入designer设计好的.ui后缀界面文件}。

三、完整展示

分为两部分程序,主程序以及qt界面程序:
ps4_contrlo.py程序为主程序,login.py为界面程序,放入一个目录下,运行ps4_control.py即可运行(安装好所需库)

  1. ps4_control
import pygame
import time
import numpy as np
import math
import sys
#导入designer工具生成的login模块
from login import Ui_Form
from PyQt5 import QtCore, QtGui, QtWidgets
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import *class JoyStick(object):def __init__(self, id):pygame.init()pygame.joystick.init()if pygame.joystick.get_count() == 0:raise Exception("Joystick not found!")self.joystick = pygame.joystick.Joystick(id)self.joystick.init()self.axis = np.zeros(self.joystick.get_numaxes())self.__alpha = 0.0self.button = [self.joystick.get_button(i) for i in range(self.joystick.get_numbuttons())]self.hat = [self.joystick.get_hat(i) for i in range(self.joystick.get_numhats())]self.lst_button = [self.joystick.get_button(i) for i in range(self.joystick.get_numbuttons())]self.lst_hat = [self.joystick.get_hat(i) for i in range(self.joystick.get_numhats())]self.button_click = self._check_button_click(self.lst_button, self.button)self.hat_click = self._check_hat_click(self.lst_hat, self.hat)self.dead_zone = 0.1@staticmethoddef _check_button_click(lst, cur):rise = [0] * len(lst)for i in range(len(lst)):if not lst[i] and cur[i]:rise[i] = 1return rise@staticmethoddef _check_hat_click(lst, cur):rise = [(0, 0)] * len(lst)for i in range(len(lst)):h0 = 1 if not lst[i][0] and cur[i][0] else 0h1 = 1 if not lst[i][1] and cur[i][1] else 0rise[i] = (h0, h1)return rise@staticmethoddef count():pygame.init()return pygame.joystick.get_count()@staticmethoddef device_name(id):if id < JoyStick.count():return pygame.joystick.Joystick(id).get_name()else:return Nonedef name(self):return self.joystick.get_name()def refresh(self):pygame.event.pump()for i in range(self.joystick.get_numaxes()):axis = self.joystick.get_axis(i)self.axis[i] = self.axis[i] * self.__alpha + axis * (1.0 - self.__alpha)if -self.dead_zone < self.axis[i] < self.dead_zone:self.axis[i] = 0self.lst_button = self.buttonself.lst_hat = self.hatself.button = [self.joystick.get_button(i) for i in range(self.joystick.get_numbuttons())]self.hat = [self.joystick.get_hat(i) for i in range(self.joystick.get_numhats())]self.button_click = self._check_button_click(self.lst_button, self.button)self.hat_click = self._check_hat_click(self.lst_hat, self.hat)class PS4Robot(object):def __init__(self, id=0):self.ps4 = JoyStick(id)if self.ps4.name().find("PS4") < 0:raise Exception("No a PS4 handle")self.dx = 0.0self.dy = 0.0self.step = 0.0self.yaw = 0.0self.speed = 0.0def refresh(self):self.ps4.refresh()x = self.ps4.axis[2]y = -self.ps4.axis[3]xy = math.sqrt(x * x + y * y)if xy < 0.1:self.dx = 0.0self.dy = 0.0self.step = 0.0else:self.dx = x / xyself.dy = y / xyself.step = max(math.fabs(x), math.fabs(y))self.yaw = self.ps4.axis[0]if self.ps4.button_click[3]:self.speed += 0.1elif self.ps4.button_click[0]:self.speed -= 0.1self.speed = min(1.0, max(0.0, self.speed))msg_list=[]msg_list.append(self.dx)msg_list.append(self.dy)msg_list.append(self.step)msg_list.append(self.yaw)msg_list.append(self.speed)return msg_list# print("Yaw = %3.1f" % self.yaw)# print("Speed = %3.1f" % self.speed)
class MyMainForm(QMainWindow, Ui_Form):def __init__(self, robot,parent=None):super(MyMainForm, self).__init__(parent)self.setupUi(self)self.robot=robotself.pushButton_2.clicked.connect(self.close)self.timer=QtCore.QTimer()self.timer.timeout.connect(self.display)self.timer.start(100)def display(self):msg=self.robot.refresh()self.line_2.setGeometry(QtCore.QRect(130+self.robot.yaw*80, 30, 20, 31))temp=80self.line_3.setGeometry(QtCore.QRect(125+self.robot.dx*temp, 202-self.robot.dy*temp, 50, 20))self.line_4.setGeometry(QtCore.QRect(140+self.robot.dx*temp, 187-self.robot.dy*temp, 20, 50))self.line_10.setGeometry(QtCore.QRect(299, 300-self.robot.step*200, 20, 20+self.robot.step*200))# 利用text Browser控件对象setText()函数设置界面显示self.progressBar.setProperty("value",self.robot.speed*100)self.textBrowser.setText( "x: " + str(self.robot.dx) + "\n"+"y: "+str(self.robot.dy)+"\n"+"step: " + str(self.robot.step) +"\n"+ "yaw: " + str(self.robot.yaw)+"\n"+"speed: " + str(self.robot.speed))if __name__ == '__main__':# 初始化robot = PS4Robot()print(robot.ps4.name())app = QApplication(sys.argv)myWin = MyMainForm(robot)#将窗口控件显示在屏幕上myWin.show()#程序运行,sys.exit方法确保程序完整退出。myWin.display()time.sleep(0.1)sys.exit(app.exec_())```、2. login.py(将login.ui文件生成的.py文件),将login.py文件放置程序当前目录可直接使用```python
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(639, 414)palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(85, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)Form.setPalette(palette)self.label = QtWidgets.QLabel(Form)self.label.setGeometry(QtCore.QRect(120, 380, 101, 31))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label.setFont(font)self.label.setObjectName("label")self.pushButton_2 = QtWidgets.QPushButton(Form)self.pushButton_2.setGeometry(QtCore.QRect(440, 360, 111, 31))self.pushButton_2.setObjectName("pushButton_2")self.progressBar = QtWidgets.QProgressBar(Form)self.progressBar.setGeometry(QtCore.QRect(50, 360, 221, 23))self.progressBar.setMaximum(100)self.progressBar.setProperty("value", 0)self.progressBar.setObjectName("progressBar")self.label_2 = QtWidgets.QLabel(Form)self.label_2.setGeometry(QtCore.QRect(120, 60, 71, 20))self.label_2.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_2.setFont(font)self.label_2.setObjectName("label_2")self.textBrowser = QtWidgets.QTextBrowser(Form)self.textBrowser.setGeometry(QtCore.QRect(350, 90, 261, 251))font = QtGui.QFont()font.setPointSize(15)self.textBrowser.setFont(font)self.textBrowser.setFrameShadow(QtWidgets.QFrame.Plain)self.textBrowser.setLineWidth(5)self.textBrowser.setObjectName("textBrowser")self.line = QtWidgets.QFrame(Form)self.line.setGeometry(QtCore.QRect(60, 40, 160, 20))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)self.line.setPalette(palette)self.line.setFrameShadow(QtWidgets.QFrame.Plain)self.line.setLineWidth(9)self.line.setMidLineWidth(6)self.line.setFrameShape(QtWidgets.QFrame.HLine)self.line.setObjectName("line")self.line_2 = QtWidgets.QFrame(Form)self.line_2.setGeometry(QtCore.QRect(130, 30, 20, 31))self.line_2.setFrameShadow(QtWidgets.QFrame.Raised)self.line_2.setLineWidth(19)self.line_2.setMidLineWidth(4)self.line_2.setFrameShape(QtWidgets.QFrame.VLine)self.line_2.setObjectName("line_2")self.label_4 = QtWidgets.QLabel(Form)self.label_4.setGeometry(QtCore.QRect(400, 60, 141, 20))self.label_4.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_4.setFont(font)self.label_4.setObjectName("label_4")self.label_5 = QtWidgets.QLabel(Form)self.label_5.setGeometry(QtCore.QRect(144, 320, 21, 20))self.label_5.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_5.setFont(font)self.label_5.setObjectName("label_5")self.label_6 = QtWidgets.QLabel(Form)self.label_6.setGeometry(QtCore.QRect(20, 204, 21, 20))self.label_6.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_6.setFont(font)self.label_6.setObjectName("label_6")self.line_3 = QtWidgets.QFrame(Form)self.line_3.setGeometry(QtCore.QRect(125, 202, 50, 20))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)self.line_3.setPalette(palette)self.line_3.setFrameShadow(QtWidgets.QFrame.Plain)self.line_3.setLineWidth(10)self.line_3.setMidLineWidth(10)self.line_3.setFrameShape(QtWidgets.QFrame.HLine)self.line_3.setObjectName("line_3")self.line_4 = QtWidgets.QFrame(Form)self.line_4.setGeometry(QtCore.QRect(140, 187, 20, 50))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)self.line_4.setPalette(palette)self.line_4.setFrameShadow(QtWidgets.QFrame.Plain)self.line_4.setLineWidth(10)self.line_4.setMidLineWidth(10)self.line_4.setFrameShape(QtWidgets.QFrame.VLine)self.line_4.setObjectName("line_4")self.line_5 = QtWidgets.QFrame(Form)self.line_5.setGeometry(QtCore.QRect(30, 100, 20, 220))self.line_5.setFrameShadow(QtWidgets.QFrame.Plain)self.line_5.setLineWidth(5)self.line_5.setFrameShape(QtWidgets.QFrame.VLine)self.line_5.setObjectName("line_5")self.line_6 = QtWidgets.QFrame(Form)self.line_6.setGeometry(QtCore.QRect(250, 100, 20, 220))self.line_6.setFrameShadow(QtWidgets.QFrame.Plain)self.line_6.setLineWidth(5)self.line_6.setFrameShape(QtWidgets.QFrame.VLine)self.line_6.setObjectName("line_6")self.line_7 = QtWidgets.QFrame(Form)self.line_7.setGeometry(QtCore.QRect(38, 92, 224, 16))self.line_7.setFrameShadow(QtWidgets.QFrame.Plain)self.line_7.setLineWidth(5)self.line_7.setFrameShape(QtWidgets.QFrame.HLine)self.line_7.setObjectName("line_7")self.line_8 = QtWidgets.QFrame(Form)self.line_8.setGeometry(QtCore.QRect(40, 310, 220, 16))self.line_8.setFrameShadow(QtWidgets.QFrame.Plain)self.line_8.setLineWidth(5)self.line_8.setFrameShape(QtWidgets.QFrame.HLine)self.line_8.setObjectName("line_8")self.label_7 = QtWidgets.QLabel(Form)self.label_7.setGeometry(QtCore.QRect(20, 110, 21, 20))self.label_7.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_7.setFont(font)self.label_7.setObjectName("label_7")self.label_8 = QtWidgets.QLabel(Form)self.label_8.setGeometry(QtCore.QRect(10, 290, 21, 20))self.label_8.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_8.setFont(font)self.label_8.setObjectName("label_8")self.label_9 = QtWidgets.QLabel(Form)self.label_9.setGeometry(QtCore.QRect(240, 320, 21, 20))self.label_9.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_9.setFont(font)self.label_9.setObjectName("label_9")self.label_10 = QtWidgets.QLabel(Form)self.label_10.setGeometry(QtCore.QRect(40, 320, 21, 20))self.label_10.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_10.setFont(font)self.label_10.setObjectName("label_10")self.line_9 = QtWidgets.QFrame(Form)self.line_9.setGeometry(QtCore.QRect(300, 300, 21, 21))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(255, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(255, 0, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)self.line_9.setPalette(palette)font = QtGui.QFont()font.setPointSize(12)self.line_9.setFont(font)self.line_9.setFrameShadow(QtWidgets.QFrame.Raised)self.line_9.setLineWidth(10)self.line_9.setMidLineWidth(3)self.line_9.setFrameShape(QtWidgets.QFrame.VLine)self.line_9.setObjectName("line_9")self.label_11 = QtWidgets.QLabel(Form)self.label_11.setGeometry(QtCore.QRect(290, 330, 51, 20))self.label_11.setBaseSize(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(15)font.setBold(True)font.setWeight(75)self.label_11.setFont(font)self.label_11.setObjectName("label_11")self.line_10 = QtWidgets.QFrame(Form)self.line_10.setGeometry(QtCore.QRect(299, 300, 20, 20))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)self.line_10.setPalette(palette)self.line_10.setFrameShadow(QtWidgets.QFrame.Plain)self.line_10.setLineWidth(15)self.line_10.setMidLineWidth(3)self.line_10.setFrameShape(QtWidgets.QFrame.VLine)self.line_10.setObjectName("line_10")self.line_11 = QtWidgets.QFrame(Form)self.line_11.setGeometry(QtCore.QRect(302, 90, 16, 10))self.line_11.setFrameShadow(QtWidgets.QFrame.Raised)self.line_11.setLineWidth(10)self.line_11.setMidLineWidth(3)self.line_11.setFrameShape(QtWidgets.QFrame.VLine)self.line_11.setObjectName("line_11")self.line_12 = QtWidgets.QFrame(Form)self.line_12.setGeometry(QtCore.QRect(293, 100, 20, 201))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)self.line_12.setPalette(palette)self.line_12.setFrameShadow(QtWidgets.QFrame.Plain)self.line_12.setLineWidth(3)self.line_12.setFrameShape(QtWidgets.QFrame.VLine)self.line_12.setObjectName("line_12")self.line_13 = QtWidgets.QFrame(Form)self.line_13.setGeometry(QtCore.QRect(306, 100, 20, 201))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)self.line_13.setPalette(palette)self.line_13.setFrameShadow(QtWidgets.QFrame.Plain)self.line_13.setLineWidth(3)self.line_13.setFrameShape(QtWidgets.QFrame.VLine)self.line_13.setObjectName("line_13")self.line_10.raise_()self.label.raise_()self.pushButton_2.raise_()self.progressBar.raise_()self.label_2.raise_()self.textBrowser.raise_()self.line.raise_()self.line_2.raise_()self.label_4.raise_()self.label_5.raise_()self.label_6.raise_()self.line_3.raise_()self.line_4.raise_()self.line_5.raise_()self.line_6.raise_()self.line_7.raise_()self.line_8.raise_()self.label_7.raise_()self.label_8.raise_()self.label_9.raise_()self.label_10.raise_()self.label_11.raise_()self.line_11.raise_()self.line_12.raise_()self.line_13.raise_()self.line_9.raise_()self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.label.setText(_translate("Form", "speed"))self.pushButton_2.setText(_translate("Form", "退出"))self.label_2.setText(_translate("Form", "yaw"))self.label_4.setText(_translate("Form", "data display"))self.label_5.setText(_translate("Form", "x"))self.label_6.setText(_translate("Form", "y"))self.label_7.setText(_translate("Form", "1"))self.label_8.setText(_translate("Form", "-1"))self.label_9.setText(_translate("Form", "1"))self.label_10.setText(_translate("Form", "-1"))self.label_11.setText(_translate("Form", "step"))

运行界面展示

程序中需要手柄提供控制方向x,y,yaw(偏航角)以及机器人速度speed和步长step。


python获取ps4手柄信息并使用QT界面显示读取内容相关推荐

  1. python获取系统硬件信息

    python获取系统硬件信息 github项目 https://github.com/giampaolo/psutil cpu,内存,etc.

  2. Python获取电脑硬件信息及状态的实现方法

    From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下 本文以 ...

  3. 用Python获取照片GPS信息

    用Python获取照片GPS信息 注意事项: 1.调用了百度地图的接口. 2.能够获取信息的照片是本身就带有这些信息的,只不过我们把它查出来了而已. 3.如果是微信接收到的非原图的照片.拍摄时没开定位 ...

  4. python 读取地震道头数据_使用python获取(宜宾市地震信息)地震信息

    6月17日22分25分,四川省宜宾市长宁县发生了6.0级地震,成都高新减灾研究所与应急管理部门联合建设的大陆地震预警网成功预警本次地震,提前10秒向宜宾市预警,提前61秒向成都预警. 虽然自己还不能写 ...

  5. (1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能

    笔者总结不容易点个关注吧    一键三联哦!       感谢您! python pyinstaller打包exe添加版本信息 打包并添加版本信息 注意!这里有个坑 如果第二次要修改版权信息 要将fi ...

  6. python获取电脑硬件信息_Python实现的读取电脑硬件信息功能示例

    本文实例讲述了Python实现的读取电脑硬件信息功能.分享给大家供大家参考,具体如下: 上学那会,老师让我用java获取电脑硬件信息,CPU, 硬盘,MAC等,那个时候感觉搞了好久...... 今天, ...

  7. Python获取磁盘使用信息,python获取GPU信息,python根据进程号获取进程信息,pynvml 获取GPU信息,psutil 获取进程信息,系统信息等

    一.工具:psutil模块 psutil是一个跨平台模块,试用相应方法可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况:可以使用我们学习知识与这模块用来做系统监控,性能分析:如果大家熟悉Lin ...

  8. Python 获取旅游景点信息及评论并作词云、数据可视化

    正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢? 今天将手把手教你使用线程池爬取 ...

  9. 用python获取宜宾市地震信息

    6月17日22分25分,四川省宜宾市长宁县发生了6.0级地震,成都高新减灾研究所与应急管理部门联合建设的大陆地震预警网成功预警本次地震,提前10秒向宜宾市预警,提前61秒向成都预警. 虽然自己还不能写 ...

最新文章

  1. C#之windows桌面软件第十三课:C#中常用的类有哪些?构造函数怎么用?
  2. 新无限天空服务器,天空魔域3782版最新服务端(含网站程序)
  3. 类库dll引用不成功问题
  4. ​电赛 | 19年全国一等奖,北航学子回忆录(上)
  5. 银行错误将10万打给自己,客户有责任退还,银行难道没责任吗?
  6. Servlet和JSP学习指导与实践(二):Session追踪
  7. java ee链接css_JavaEE——CSS3选择器
  8. 解题:ZJOI 2006 书架
  9. linux缺页异常处理--用户空间
  10. 《深入浅出通信原理》读书笔记系列1-第2章 信号与频谱
  11. openGauss数据库备份恢复指导手册
  12. 徒步穿越的技巧和要领
  13. php each 指针,PHP each() 函数用法简介
  14. 机器学习基础补习04---凸优化
  15. 【离散数学】 MIT 6.042J 笔记 - Lecture 1 Introductions and Proofs
  16. android 评论发表情,安卓手机怎么在微信朋友圈评论发表情包?
  17. Arcgis连接sql server发布地图服务详解
  18. Okhttp源码分析以及Google Gson解析json数据实例
  19. ORACLE日期函数浅谈
  20. ZZULIOJ-1075,聚餐人数统计(Python)

热门文章

  1. 两种方式实现局部刷新
  2. 把一个数随机分成n份,随机数字和等于这个数字
  3. linux和windows共享鼠标,synergy-两台电脑Linuxwindows共享一套鼠标键盘
  4. ZUUL2 使用场景
  5. transpose公式_excel的转置操作TRANSPOSE函数详解
  6. 计算机考研复试计算机网络常见面试题
  7. 关于iTOP安装过程中报错的问题
  8. 【转载】深入理解L1、L2范数
  9. 用Python分析一下那些吸粉无数的高票房电影
  10. 安卓次元壁纸v2.3.3 纯粹简洁的二次元壁纸