2017-06-26 9 views
1

Ich bin neu bei Python. Ich entwickle eine GUI in Qt mit Python 3.6 (pyqt5). Ich habe eine Verbindungstaste, die eine serielle Verbindung mit dem Gerät herstellt. Jetzt hat die GUI auch andere Schaltflächen. Aber sie sollten nur funktionieren, wenn die Verbindungstaste gedrückt wurde und eine serielle Verbindung hergestellt wurde. Zu allen anderen Zeiten sollte es eine Nachricht senden 'Device not connected'. Hier ist ein Teil des Codes:So stellen Sie eine serielle Verbindung in PyQT5 her

import serial, time 
import sys 
import PyQt5 
from PyQt5.QtWidgets import * 
import mainwindow_auto 
class MainWindow(QMainWindow, mainwindow_auto.Ui_MainWindow): 
    def __init__(self): 
     #define gui actions here 
     super(self.__class__, self).__init__() 
     self.setupUi(self) 
     self.constat=0 

     self.plus_y_button.clicked.connect(self.moveplusy) 
     self.connect_button.clicked.connect(self.connect_printer) 

    def connect_printer(self): 

     port=str(self.port_sel_box.currentText()) 
     baudrate=str(self.baud_sel_box.currentText()) 

     try: 
      ser = serial.Serial(port, baudrate) 
      self.log_box.append('Connecting to printer....\nPort selected :'+self.port_sel_box.currentText()+'\nBaud Rate :'+self.baud_sel_box.currentText()) 

     except serial.serialutil.SerialException: 
      self.log_box.append('No device available....Please connect a device') 
    def moveplusy(self): 
     if(ser.isOpen()==true): 

      print('moving Y by +1') 
      self.log_box.append('moving Y by +1') 
     else: 
      print('No device available') 

dies ist nur ein Teil des Codes, ich habe nicht alle Widgets im Code enthalten, sondern nur die relevanten parts.When ich den Code der GUI-Fenster öffnet laufen, aber wenn ich drücke die Python stürzt ab.Eine Möglichkeit wäre, die serielle Verbindung in der Konstruktorfunktion zu machen, aber ich möchte die serielle Verbindung nur stattfinden, wenn ich die connect_button drücke. Dies ist ein Screenshot von dem, was passiert, wenn ich die plus_y_button drücken:

screenshot

Jede Idee, wie darüber, wie es zu lösen?

+0

können Sie das genaue Problem angeben, das adressiert werden soll? – user1993

+0

Ich möchte eine serielle Verbindung nur herstellen, wenn ich 'connect_button' drücke. Wenn ich' plus_y_button' drücke, sollte eine bestimmte Aktion ausgeführt werden, abhängig davon, ob 'connect_button' gedrückt wurde und die serielle Verbindung hergestellt wurde. Anderenfalls sollte 'No device' gedruckt werden. –

Antwort

0

In der Funktion "connect_printer" definieren Sie lokal die Variable "ser", die dann beim Beenden der Funktion zerstört wird. Um "ser" in der Funktion "moveplusy" zu verwenden, müssen Sie es als Mitglied der Klasse definieren (z. B. self.ser). Darüber hinaus sollte "True" in der Funktion groß geschrieben werden.

import serial, time 
import sys 
import PyQt5 
from PyQt5.QtWidgets import * 
import mainwindow_auto 
class MainWindow(QMainWindow, mainwindow_auto.Ui_MainWindow): 
    def __init__(self): 
     #define gui actions here 
     super(self.__class__, self).__init__() 
     self.setupUi(self) 
     self.constat=0 

     self.plus_y_button.clicked.connect(self.moveplusy) 
     self.connect_button.clicked.connect(self.connect_printer) 

    def connect_printer(self): 

     port=str(self.port_sel_box.currentText()) 
     baudrate=str(self.baud_sel_box.currentText()) 

     try: 
      self.ser = serial.Serial(port, baudrate) 
      self.log_box.append('Connecting to printer....\nPort selected :'+self.port_sel_box.currentText()+'\nBaud Rate :'+self.baud_sel_box.currentText()) 

     except serial.serialutil.SerialException: 
      self.log_box.append('No device available....Please connect a device') 
    def moveplusy(self): 
     if self.ser.isOpen(): 

      print('moving Y by +1') 
      self.log_box.append('moving Y by +1') 
     else: 
      print('No device available') 
Verwandte Themen