How to create a list and append to list inside a mqtt and GUI program?

Sayth Renshaw flebber.crue at gmail.com
Sun Sep 1 20:00:03 EDT 2019


On Monday, 2 September 2019 06:02:58 UTC+10, Spencer Du  wrote:
> Hi 
> 
> I have code for GUI and MQTT. In GUI.py I have "def loadGUI" which loads up a GUI file if the file exists in current directory. I want to add the file name to a list when a file is imported and for each subsequent file that is imported I want the file name to be imported to the same list and print the list or create a new list but with the imported file named added to list which has the existing file names that have already been imported. I was wondering how I do this. By the way run GUI.py to test this and test1.py and test2.py are the files which can be used to import GUI . 
> 
> GUI.py 
> 
> import logging 
> from datetime import timedelta 
> import time 
> from thespian.actors import * 
> from transitions import Machine 
> import paho.mqtt.client as mqtt 
> import importlib 
> import os.path 
> import sys 
> from PyQt5.QtWidgets import * 
> from PyQt5.QtCore import * 
> from PyQt5 import QtWidgets, uic 
> from mqtt import * 
> import json 
> 
> class MainWindow(QtWidgets.QMainWindow): 
>     def __init__(self,parent = None): 
>         QMainWindow.__init__(self) 
>         super(MainWindow, self).__init__(parent) 
>         self.mdi = QMdiArea() 
>         self.setCentralWidget(self.mdi) 
> 
>         self.setMinimumSize(QSize(800, 600)) 
>         self.setWindowTitle("PyQt button example - pythonprogramminglanguage.com") 
> 
>         pybutton = QPushButton('Add device', self) 
> 
>         pybutton.clicked.connect(self.importbutton) 
> 
>         pybutton.move(100, 400) 
>         pybutton.resize(150, 32) 
> 
>         self.textbox = QLineEdit(self) 
>         self.textbox.move(100,350) 
>         self.textbox.resize(100, 32) 
>         
>         self.fileName_UI = "" 
> 
>     def importbutton(self): 
>         self.fileName_UI = self.textbox.text() 
>         self.loadGUI() 
> 
>     def getGUIFilename(self): 
>         return self.fileName_UI 
> 
>     def loadGUI(self): 
>         print("Searching file", self.fileName_UI)       
>         try: 
>             module = __import__(self.fileName_UI) 
>             my_class = getattr(module, "SubWindow") 
> 
>             sub = QMdiSubWindow() 
> 
>             sub.setWidget(my_class()) 
>             sub.setWindowTitle("New GUI:  " + self.fileName_UI) 
>             self.mdi.addSubWindow(sub) 
>             sub.show() 
> 
>             print("creating new instance " + self.fileName_UI) 
>             client = device("Device") 
>             client.run() 
> 
>             client.loop_start()  # start the loop 
>             device_message = self.fileName_UI 
>             time.sleep(2) 
>             print("Subscribing to topic", "microscope/light_sheet_microscope/UI") 
>             client.subscribe("microscope/light_sheet_microscope/UI") 
>             print("Publishing message to topic", "microscope/light_sheet_microscope/UI") 
>             client.publish("microscope/light_sheet_microscope/UI", json.dumps({"type": "device", "payload":{"name": self.fileName_UI, "cmd": "adding device"}}, indent=2)) 
>             time.sleep(1)  # wait 
>             client.loop_stop()  # stop the loop 
>             print("Device added" + "\n") 
>             listofdevice = [] 
>             listofdevice.append(self.fileName_UI) 
>             print(listofdevice) 
>         except: 
>             print("creating new instance " + self.fileName_UI) 
>             client = device("Device") 
>             client.run() 
> 
>             client.loop_start()  # start the loop 
>             device_message = self.fileName_UI 
>             time.sleep(2) 
>             print("Subscribing to topic", "microscope/light_sheet_microscope/UI") 
>             client.subscribe("microscope/light_sheet_microscope/UI") 
>             print("Publishing message to topic", "microscope/light_sheet_microscope/UI") 
>             client.publish("microscope/light_sheet_microscope/UI", json.dumps({"type": "device", "payload":{"name": self.fileName_UI}}, indent=2)) 
>             time.sleep(2)  # wait 
>             client.loop_stop()  # stop the loop 
>             print(device_message + ".py " + "file doesn't exist") 
>             print("Device not added") 
> if __name__ == "__main__": 
>     app = QApplication(sys.argv) 
>     mainWin = MainWindow() 
>     mainWin.show() 
>     publishedMessage = mainWin.getGUIFilename() 
>     sys.exit(app.exec_()) 
> 
> MQTT.py 
> import logging 
> from datetime import timedelta 
> import time 
> from thespian.actors import * 
> from transitions import Machine 
> import paho.mqtt.client as mqtt 
> import importlib 
> import os.path 
> import sys 
> from PyQt5.QtWidgets import * 
> from PyQt5.QtCore import * 
> from PyQt5 import QtWidgets, uic 
> 
> class device(mqtt.Client): 
>     def on_connect(self, mqttc, obj, flags, rc): 
>         if rc == 0: 
>             print("Connected to broker") 
>         else: 
>             print("Connection failed") 
> 
>         # mqttc.subscribe("microscope/light_sheet_microscope/UI") 
> 
>     def on_message(self, mqttc, userdata, message): 
>         msg = str(message.payload.decode("utf-8")) 
>         print("message recieved= " + msg) 
>         # print("File which you want to import(with .py extension)") 
>         print("message topic=", message.topic) 
>         print("message qos=", message.qos) 
>         print("message retain flag=", message.retain) 
> 
>     def run(self): 
>         self.connect("broker.hivemq.com", 1883, 60) 
> 
> test1.py
> 
> from PyQt5 import QtCore, QtGui, QtWidgets
> import sys
> from PyQt5.QtWidgets import *
> from PyQt5.QtCore import *
> from PyQt5 import QtWidgets, uic
> from mqtt import *
> 
> class SubWindow(QWidget):
>     def __init__(self, parent = None):
>         super(SubWindow, self).__init__(parent)
>         self.setMinimumSize(QSize(300, 200))
>         label = QLabel("Laser",  self)
>         
>         self.modeButton = QtWidgets.QPushButton("Click me",self)
>         self.modeButton.setGeometry(QtCore.QRect(10, 40, 81, 23))
>         self.modeButton.setObjectName("Turn on")
>         self.modeButton.clicked.connect(self.modFun)
> 
>     def modFun(self):
>             print("creating new instance " + "Laser")
>             client = device("Laser")
>             client.run()
> 
>             client.loop_start()  # start the loop
>             device_message = "ON"
>             time.sleep(2)
>             print("Subscribing to topic", "microscope/light_sheet_microscope/UI")
>             client.subscribe("microscope/light_sheet_microscope/UI")
>             print("Publishing message to topic", "microscope/light_sheet_microscope/UI")
>             client.publish("microscope/light_sheet_microscope/UI", device_message)
>             time.sleep(2)  # wait
>             client.loop_stop()  # stop the loop
>         
>     def closeEvent(self, event):
>         self.close()
> 
> test2.py
> 
> from PyQt5 import QtCore, QtGui, QtWidgets
> import sys
> from PyQt5.QtWidgets import *
> from PyQt5.QtCore import *
> from PyQt5 import QtWidgets, uic
> 
> class SubWindow(QWidget):
>     def __init__(self, parent = None):
>         super(SubWindow, self).__init__(parent)
>         self.setMinimumSize(QSize(300, 250))
>         label = QLabel("Sub Window",  self)
>         
>         self.modeButton = QtWidgets.QPushButton("Click me",self)
>         self.modeButton.setGeometry(QtCore.QRect(10, 40, 81, 23))
>         
>         self.modeButton.clicked.connect(self.modFun)
> 
>         
> 
>     def modFun(self):
>         print("Hello there i'm Click me")
>         
>     def closeEvent(self, event):
>         self.close()
> 
> Thanks.

list_of_file_name = []
my_file = getGUIFilename()
list.append(my_file)

Sayth



More information about the Python-list mailing list