如何以整数形式检索 QLabel 值

How to retrieve a QLabel Value as an Integer

我已经编写了一个程序,可以从命令行控制 raspberry pi 上的 PWM 输出,但我现在想使用 GUI 来控制它。

我正在使用 PyQt5 设计 GUI 来控制 PWM 输出,我想从使用刻度盘调整的标签中检索值,然后用于更改我的 PWM 输出的占空比。

我正在使用 raspberry pi 3 Model B+。

我在下面附上了我的代码的相关部分:

设置 Main Window - 使用 pyuic.[=12 时发生的标准 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

我收到类型错误:无法排序的类型 int()

这个问题不仅仅是直接转换,因为它不允许将 QLabel 值转换为整数。

谢谢!

好的,为了解决这个问题,我不得不将标签的代码从 "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 转换,它会自动在你的标签中设置任何值为文本值或空字符串,您只需使用 setNum.

将其转换为整数