如何从PyQt5调用Pyserial函数时解决错误?

问题描述 投票:0回答:1

简单的程序,当我在代码中切换按钮时,需要它根据pyserial写功能的按钮状态来写'On'或'Off'

import sys
import serial
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtGui import QPainter, QBrush, QPen, QColor
from PyQt5.QtCore import Qt, pyqtSlot

class Control_LED(QWidget):

   def __init__(self):
       super().__init__()
       self.title = "Home Automation"
       self.top = 10
       self.left = 10
       self.width = 500
       self.height = 250
       self.initUI()

   def initUI(self):
       self.setWindowTitle(self.title)
       self.setGeometry(self.left, self.top, self.width, self.height)

       self.toggle_button = QPushButton('On/Off', self)
       self.toggle_button.move(300, 100)
       self.toggle_button.setCheckable(True)
       self.toggle_button.clicked.connect(self.change_state)
       self.color = QColor(Qt.white)

       self.show()

   def serialWrite(self):
       self.ser = serial.Serial(port='/dev/ttyS0', baudrate=9600,
       parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,
       bytesize=serial.EIGHTBITS, timeout=0)

   def paintEvent(self, event):
       painter = QPainter(self)
       painter.setPen(QPen(Qt.black, 8, Qt.SolidLine))
       painter.setBrush(self.color)
       painter.drawEllipse(40, 40, 200, 200)

   @pyqtSlot()
   def change_state(self):
       if(self.toggle_button.isChecked()):
           print('On')
           self.color = QColor(Qt.green)
           self.update()
           ser.write(b'On')
       else:
           print('Off')
           self.color = QColor(Qt.red)
           self.update()
           ser.write(b'Off')

if __name__ == '__main__':
   app = QApplication(sys.argv)
   ex = Control_LED()
   sys.exit(app.exec_())

我收到以下错误:

Traceback (most recent call last):
  File "on_off_toggle.py", line 47, in change_state
    ser.write(b'On')
NameError: name 'ser' is not defined
Aborted (core dumped)

如何解决该错误。谢谢

python pyqt5 pyserial
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.