我已经编写了一个程序,该程序可以从命令行控制树莓派上的PWM输出,但是现在我想使用GUI对其进行控制。
我正在设计使用PyQt5来控制PWM输出的GUI,我想从Label中检索值,该值通过转盘进行调整,然后用于更改PWM输出的占空比。
我正在使用树莓派3型B +。
我已在下面附上我的代码的相关部分:
设置主窗口-使用pyuic时发生的标准ui到py的转换。
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.dial = QtWidgets.QDial(self.centralwidget)
self.dial.setObjectName("dial")
self.verticalLayout.addWidget(self.dial)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.dial.valueChanged['int'].connect(self.label.setNum)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
正在尝试从标签中检索值并最终更新占空比的功能。
def ChangeSpeed(self):
self.My_PWM.start(0)
while True:
if 0 < self.ui.label:
self.My_PWM.ChangeDutyCycle(self.ui.label)
elif self.ui.label<0:
self.My_PWM.ChangeDutyCycle(0)
print("Programme Ended")
break
我收到一个类型错误:无法排序的tyoes int()
这个问题不仅仅是简单的转换,因为它不允许将QLabel值转换为整数。
谢谢!
答案 0 :(得分:0)
确定要解决此问题,我不得不将标签的代码从“ self.label.setText ...”更改为“ self.label.setNum(0)”,这将起始值设置为零,然后使用int(self.ui.label.text())进行标准整数转换。我希望这是有道理的
代码的相关部分如下:
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setNum(0)
self.pushButton.setText(_translate("MainWindow", "Set Speed"))
此后,我添加了一个按钮来设置占空比。
这是我代码的转换部分:
def ChangeSpeed(self):
self.My_PWM.start(0)
if 0 < int(self.ui.label.text()):
self.My_PWM.ChangeDutyCycle(int(self.ui.label.text()))
elif int(self.ui.label.text())<0:
self.My_PWM.ChangeDutyCycle(0)
print("Programme Ended")
我希望这对于希望将Qlabel转换为int的人来说一定要小心,如果您像我一样使用QtDesigner并执行pyuic5转换,它将自动将标签中的任何值设置为a文本值或空字符串,您只需使用setNum将其转换为整数。