Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3和限制用户手动输入调频电台频率_Python_Pyqt_Pyqt5 - Fatal编程技术网

Python3和限制用户手动输入调频电台频率

Python3和限制用户手动输入调频电台频率,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我正在自学Python和PYQT5,通过使用树莓皮和Arduino制作调频收音机。Pi在7英寸触摸屏上运行UI,Arduino运行FM收音机RDA5807M硬件 我想要的无线电操作之一是让用户手动输入无线电应该调谐到的电台的频率。我只允许美国FM电台的有效频率(aka,88.3,92.7,104.5等,范围在88.1到107.9之间。最后一个数字必须是1,3,5,7或9。如果用户键入的键不是数字或小数点,我希望忽略该键 这似乎建议使用状态机或regex类型的操作,但我不知道如何使用Python实

我正在自学Python和PYQT5,通过使用树莓皮和Arduino制作调频收音机。Pi在7英寸触摸屏上运行UI,Arduino运行FM收音机RDA5807M硬件

我想要的无线电操作之一是让用户手动输入无线电应该调谐到的电台的频率。我只允许美国FM电台的有效频率(aka,88.3,92.7,104.5等,范围在88.1到107.9之间。最后一个数字必须是1,3,5,7或9。如果用户键入的键不是数字或小数点,我希望忽略该键

这似乎建议使用状态机或regex类型的操作,但我不知道如何使用Python实现这一点(语言山现在有点陡峭)。如果您对用户输入有类似的要求,您将如何实现它?或者,请提供进一步阅读的指针

谢谢。

试试看:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui     import *
from PyQt5.QtCore    import *

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.frequencyStr = ""

        self.sb = QDoubleSpinBox()
        self.sb.setRange(88.1, 107.9)
        self.sb.setValue(88.3)   
        self.sb.setDecimals(1)
        self.sb.setSingleStep(0.2)        
        self.sb.valueChanged.connect(self.onValueChanged)

        self.labelSelected = QLabel("Selected station frequency: <b style='color: blue;'> 88.3 </b>")
        self.btn = QPushButton('Set up a radio station')
        self.btn.clicked.connect(self.setUpRadios)
        self.labelSet = QLabel()
        self.labelSet.setAlignment(Qt.AlignCenter)
        self.labelSet.setFrameStyle(QFrame.Panel | QFrame.Sunken)
        self.labelSet.setScaledContents(True)

        layout = QVBoxLayout()
        layout.addWidget(self.labelSelected)
        layout.addWidget(self.btn)
        layout.addWidget(self.sb)
        layout.addWidget(self.labelSet)

        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def onValueChanged(self, value):
        if "{0:08b}".format(int("{:.1f}".format(value)[-1]))[-1] == "1":
            self.frequencyStr = "{:.1f}".format(value)
            self.labelSelected.setText(
                    "Selected station frequency: <b style='color: blue;'> {} </b>"
                    "".format(self.frequencyStr))
        self.labelSet.setText("")

    def setUpRadios(self, value):
        self.labelSet.setText("<b style='color: red; font:36pt \"Georgia\";'> {} </b>"
                              "".format(self.frequencyStr))

if __name__ == '__main__':
    app = QApplication([])
    MainWin = MainWindow()
    MainWin.show()
    app.exec()
导入系统 从PyQt5.QtWidgets导入* 从PyQt5.QtGui导入* 从PyQt5.QtCore导入* 类主窗口(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() self.frequencyStr=“” self.sb=QDoubleSpinBox() 自我设定范围(88.1107.9) 自我设定值(88.3) 自我设定小数(1) 自设单步(0.2) self.sb.valueChanged.connect(self.onValueChanged) self.labelSelected=QLabel(“所选电台频率:88.3”) self.btn=QPushButton('设置无线电台') self.btn.clicked.connect(self.setUpRadios) self.labelSet=QLabel() self.labelSet.setAlignment(Qt.AlignCenter) self.labelSet.setFrameStyle(QFrame.Panel | QFrame.Sunken) self.labelSet.setScaledContent(真) layout=QVBoxLayout() layout.addWidget(self.labelSelected) layout.addWidget(self.btn) layout.addWidget(self.sb) layout.addWidget(self.labelSet) central_widget=QWidget() central_widget.setLayout(布局) self.setCentralWidget(中心窗口小部件) def onValueChanged(自身,值): 如果“{0:08b}”.format(int(“{.1f}”.format(value)[-1]))[-1]==”1:: self.frequencyStr=“{.1f}”。格式(值) self.labelSelected.setText( “所选电台频率:{}” “”.format(self.frequencyStr)) self.labelSet.setText(“”) def设置收音机(自身、值): self.labelSet.setText(“{}” “”.format(self.frequencyStr)) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QApplication([]) MainWin=MainWindow() MainWin.show() app.exec()