Raspberry Pi初学者
我正在编程GUI应用程序(使用 PyQt5 )来控制直流电机。 到目前为止,我可以通过电机驱动器控制电机并在终端中更改它的速度(使用 PWM )。
当我想在我的GUI应用程序中使用电机控制器代码时会出现问题,因为当我运行电机运动功能时,我的time.sleep(x)会停止整个GUI应用程序,因此我无法对电机进行更改。速度。
我发现线程可能会解决我的问题,但我不知道如何在线程运行时修改速度。
这是我的电机运行代码:
from PyQt5 import QtWidgets,uic, QtCore
...
def start():
while True:
#run motor here
dlg.btn_start.clicked.connect(start)
...
用于GUI的Python:
str_replace("\XE2\X84\XA2", "™", $new_text);
我希望我没有比现在更复杂, 谢谢大家的答案!
祝你好运!
答案 0 :(得分:0)
<强> 解决方案: 强>
我使用Python多处理功能。
我的程序现在分为两个过程:
1.GUI过程,运行GUI和信号,当滑块更改时,该信号运行速度变化功能。每当滑块的位置发生变化时,该值都会保存到文本文件中。
2.Motor process 是一直在读取同一文件并将值从文件应用到电机速度的过程。如果该值设置为0,则电机关闭。
我认为这不是唯一的解决方案,当然不是最好的,但它对我有用。
我希望你们中的一些人也会希望!
干杯!
当然代码:
from PyQt5 import QtWidgets,uic, QtCore
from PyQt5.QtWidgets import QMessageBox,QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog
from PyQt5.QtCore import QTimer,QTime
from PyQt5.QtGui import QIcon
import time
from multiprocessing import Process, Queue, Value
app = QtWidgets.QApplication([])
dlg = uic.loadUi("Motor.ui")
def startMotor():
try:
while True:
time.sleep(0.01)
file = open("test.txt", "r")
a=file.read()
file.close()
if int(a) == 0:
print("OFF")
#motor is off
else:
#motor is ON
print("ON, speed is:", a)
except:
print("Abort...")
def runProgram():
dlg.show()
app.exec()
def changeSpeed():
dlg.label.setText(str(dlg.slider.value()))
file = open("test.txt","w")
file.write(str(dlg.slider.value()))
file.close()
#when slider's value is changed
dlg.slider.valueChanged.connect(changeSpeed)
if __name__ == '__main__':
#On Program load
p1 = Process(target=startMotor,args=())
p2 = Process(target=runProgram,args=())
p1.start()
p2.start()
p1.join()
p2.join()
如果有人有兴趣学习PyQt5设计的基础知识,请查看我的YouTube频道,其中我将解释基础知识: Link