Как получить значение QLabel как целое число - PullRequest
0 голосов
/ 13 ноября 2018

Я написал программу, которая может управлять выводом ШИМ на Raspberry Pi из командной строки, но теперь я хотел бы управлять им с помощью графического интерфейса.

Я проектирую графический интерфейс с использованием PyQt5 для управления выходом ШИМ, я хотел бы получить значение из метки, которое настраивается с помощью шкалы, чтобы затем использовать ее для изменения коэффициента заполнения моего ШИМ-выхода.

Я использую Raspberry Pi 3 Model B +.

Я приложил соответствующий раздел моего кода ниже:

Настройка главного окна - стандартное преобразование пользовательского интерфейса в py, которое происходит при использовании pyuic.

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 в целое число.

Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Хорошо, чтобы решить эту проблему, мне пришлось изменить код метки с «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.

...