Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Displaying real-time data on a 2nd window
Forum Updated to NodeBB v4.3 + New Features

Displaying real-time data on a 2nd window

Scheduled Pinned Locked Moved Unsolved General and Desktop
51 Posts 4 Posters 9.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • JonBJ JonB

    @john_hobbyist

    ct = pandas.read_csv('CurrentTown.csv')
    

    We don't know what pandas.read_csv() returns. I would guess some kind of table? So I don't know what you expect to put in a QLineEdit for its "value".

    Anyway, if you have qle.textChanged[str].connect(self.onChanged) that means self.onChanged() will be called when qle's text changes. If qle is the QLineEdit you are talking about

    change the text in QLineEdit when "ct" variable has different value.

    then that connection is not relevant. If this is what you want, then "when "ct" variable has different value" however that happens just call qle.setText(str(ct)) or whatever you want. Else you mean something different.

    J Offline
    J Offline
    john_hobbyist
    wrote on last edited by john_hobbyist
    #23

    @JonB said in Displaying real-time data on a 2nd window:

    @john_hobbyist

    ct = pandas.read_csv('CurrentTown.csv')
    

    We don't know what pandas.read_csv() returns. I would guess some kind of table? So I don't know what you expect to put in a QLineEdit for its "value".

    Anyway, if you have qle.textChanged[str].connect(self.onChanged) that means self.onChanged() will be called when qle's text changes. If qle is the QLineEdit you are talking about

    change the text in QLineEdit when "ct" variable has different value.

    then that connection is not relevant. If this is what you want, then "when "ct" variable has different value" however that happens just call qle.setText(str(ct)) or whatever you want. Else you mean something different.

     ct = pandas.read_csv('CurrentTown.csv')
    

    holds the name of one town each time I read the .csv. nothing else. It is use in order to pass the name of the town from another class/method and that's it. When I move the cursor of the mouse to another town the .csv stores the other new town (from the other class/method) and I read it with the "ct". I only need to update the town name on the QLineEdit field...

    JonBJ 1 Reply Last reply
    0
    • J john_hobbyist

      @JonB said in Displaying real-time data on a 2nd window:

      @john_hobbyist

      ct = pandas.read_csv('CurrentTown.csv')
      

      We don't know what pandas.read_csv() returns. I would guess some kind of table? So I don't know what you expect to put in a QLineEdit for its "value".

      Anyway, if you have qle.textChanged[str].connect(self.onChanged) that means self.onChanged() will be called when qle's text changes. If qle is the QLineEdit you are talking about

      change the text in QLineEdit when "ct" variable has different value.

      then that connection is not relevant. If this is what you want, then "when "ct" variable has different value" however that happens just call qle.setText(str(ct)) or whatever you want. Else you mean something different.

       ct = pandas.read_csv('CurrentTown.csv')
      

      holds the name of one town each time I read the .csv. nothing else. It is use in order to pass the name of the town from another class/method and that's it. When I move the cursor of the mouse to another town the .csv stores the other new town (from the other class/method) and I read it with the "ct". I only need to update the town name on the QLineEdit field...

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #24

      @john_hobbyist

      Everytime I move the mouse pointer (on the map) to different places, the second window should update the values and show new data, which does not happen.

      Show the code you use to connect the mouse move signal or event in the first window to the slot in the second window.

      If you say everything works when you output the town name on the terminal (print() maybe?), and now want to display it on a QTextEdit instead, then as I already said all you have to do is call the line edit's setText().

      1 Reply Last reply
      1
      • J Offline
        J Offline
        john_hobbyist
        wrote on last edited by john_hobbyist
        #25
        class Town(QWidget):
            def __init__(self):
                super().__init__()
                self.initUI()
                
            def initUI(self):
                import sys
                from PyQt5.QtWidgets import QWidget,QPushButton,QApplication,QListWidget,QGridLayout,QLabel
                from PyQt5.QtCore import QTimer,QDateTime
                from PyQt5 import QtWidgets
                from PyQt5.QtWidgets import QApplication, QMainWindow
                from PyQt5 import QtCore
                
                win = QWidget()
                grid=QGridLayout()
               
                import pandas
                ct = pandas.read_csv('CurrentTown.csv')
                town = QLabel("town:")
                town.setStyleSheet("border: 1px solid black; background-color: yellow")  
                grid.addWidget(town, 1,1)
                textEdit_1 = QLineEdit(ct)
                textEdit_1.textChanged[str].connect(self.onChanged)
                textEdit_1.setReadOnly(True)
                grid.addWidget(textEdit_1,1,2)
        
                
                import os
                os.remove('CurrentTown.csv')
            
                self.setLayout(grid)
                win.setGeometry(100,100,200,100)
                win.setWindowTitle("Test")
                win.show()
                
            def onChanged(self, text):
                 self.textEdit_1.setText(str(ct))
        

        Any ideas??

        JonBJ 1 Reply Last reply
        0
        • J john_hobbyist
          class Town(QWidget):
              def __init__(self):
                  super().__init__()
                  self.initUI()
                  
              def initUI(self):
                  import sys
                  from PyQt5.QtWidgets import QWidget,QPushButton,QApplication,QListWidget,QGridLayout,QLabel
                  from PyQt5.QtCore import QTimer,QDateTime
                  from PyQt5 import QtWidgets
                  from PyQt5.QtWidgets import QApplication, QMainWindow
                  from PyQt5 import QtCore
                  
                  win = QWidget()
                  grid=QGridLayout()
                 
                  import pandas
                  ct = pandas.read_csv('CurrentTown.csv')
                  town = QLabel("town:")
                  town.setStyleSheet("border: 1px solid black; background-color: yellow")  
                  grid.addWidget(town, 1,1)
                  textEdit_1 = QLineEdit(ct)
                  textEdit_1.textChanged[str].connect(self.onChanged)
                  textEdit_1.setReadOnly(True)
                  grid.addWidget(textEdit_1,1,2)
          
                  
                  import os
                  os.remove('CurrentTown.csv')
              
                  self.setLayout(grid)
                  win.setGeometry(100,100,200,100)
                  win.setWindowTitle("Test")
                  win.show()
                  
              def onChanged(self, text):
                   self.textEdit_1.setText(str(ct))
          

          Any ideas??

          JonBJ Offline
          JonBJ Offline
          JonB
          wrote on last edited by JonB
          #26

          @john_hobbyist said in Displaying real-time data on a 2nd window:

          textEdit_1.textChanged[str].connect(self.onChanged)

          I already said. You think you want to connect QLineEdit.textChanged signal to do something. That is when something changes the text. But you don't have anything changing the text. You need a signal for when the file content changes to connect to a slot to change the text in the line edit.

          You claimed you had it working printing on terminal fine, but I don't see that.

          Conceptually the code you have to read the file must be in a method called when the text in the file is changed. You have all this code in the constructor of the Town widget, which cannot be right.

          There is no connection at all between your textEdit_1 = QLineEdit(ct) and the self.textEdit_1.setText(str(ct)) you use later. Please review local versus member variables in Python.

          You don't want to have any self.textEdit_1 in class Town as the line edit you want to address is not on the Town widget, it is on the win widget.

          Start by creating a separate Python module and class for your second window. Put the code to read the file and set the line edit text there. Then in this Town module create an instance of that class and show it. In Town you will have some connection like:

          self.signalForFileDataChanged.connect(self.otherWindow.onFileDataChanged)
          

          where the second window's onFileDataChanged() reads the new text from the file and sets its line edit.

          When you have that working you may see that you could have the Town.signalForFileDataChanged() signal send a parameter of the new town name to the OtherWindow.onFileDataChanged() slot for it to show. Then you can ditch having them communicate via the content of an external file.

          1 Reply Last reply
          3
          • J Offline
            J Offline
            john_hobbyist
            wrote on last edited by john_hobbyist
            #27

            I have another method that I want to call from another class. I have this code:

            class Two(CentralWindow):
                def do_something(self, checked):
                . . .
            

            I want to call the do_something method from initUI(self) ??
            I have tried google search solutions, but they show to call a method outside a class/method. I need to call the do_something method from inside initUI(self) method....

            JonBJ 1 Reply Last reply
            0
            • J john_hobbyist

              I have another method that I want to call from another class. I have this code:

              class Two(CentralWindow):
                  def do_something(self, checked):
                  . . .
              

              I want to call the do_something method from initUI(self) ??
              I have tried google search solutions, but they show to call a method outside a class/method. I need to call the do_something method from inside initUI(self) method....

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by JonB
              #28

              @john_hobbyist
              Fundamental Python. Nothing special about initUI(self).

              • From within class Two: self.do_something(checked).
              • From outside class Two: class_two_instance.do_something(checked).
              1 Reply Last reply
              1
              • J Offline
                J Offline
                john_hobbyist
                wrote on last edited by john_hobbyist
                #29
                This post is deleted!
                1 Reply Last reply
                0
                • J Offline
                  J Offline
                  john_hobbyist
                  wrote on last edited by john_hobbyist
                  #30

                  In order to start from somewhere, after your very useful comments I did a change in the code so that when the ct changes to call the method def onChanged(self, text) which prints "OK". However, this happens only the first time that ct changes value. All the next times it does not print "OK"...What do I miss here???

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #31

                    I may sound harsh but: proper architecture.

                    I would suggest to start with something really minimal to just learn to use signals and slots properly, how to manage multiple different complex widgets that are only linked together by signals and slots.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    2
                    • J Offline
                      J Offline
                      john_hobbyist
                      wrote on last edited by
                      #32

                      I am trying! How can I call a method before declaring it?

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #33

                        You just don't.

                        As I already suggested: start with Qt's basics.

                        • Single widget with signals and slots within it.
                        • Second widget completely unrelated to the first one
                        • Connect them only after they both properly work independently
                        • While doing that: write unit tests

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        2
                        • J Offline
                          J Offline
                          john_hobbyist
                          wrote on last edited by
                          #34

                          @SGaist Thank you, I will try it.

                          Please tell me a reason that the code runs commands such as open/make a widget + QLinedit + QLabels (I checked it with print commands) but I see only the widget (window) and nothing inside... What is wrong?

                          jsulmJ 1 Reply Last reply
                          0
                          • J john_hobbyist

                            @SGaist Thank you, I will try it.

                            Please tell me a reason that the code runs commands such as open/make a widget + QLinedit + QLabels (I checked it with print commands) but I see only the widget (window) and nothing inside... What is wrong?

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #35

                            @john_hobbyist said in Displaying real-time data on a 2nd window:

                            What is wrong?

                            Please show the code, else only guessing is possible!
                            Did you add these widgets to your container widget (main window or whatever)?

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            1
                            • J Offline
                              J Offline
                              john_hobbyist
                              wrote on last edited by
                              #36

                              I am trying to embed a grid layout to the right side of the mainwidget. Imagine that I have divided the mainwidget area into 2 areas, left and side. I get this error though:

                              File "code.py", line 1643, in __init__
                                mylayout.addWidget(self.imageviewer, 1, 1)
                              TypeError: addWidget(self, QWidget, stretch: int = 0, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment()): argument 3 has unexpected type 'int'
                              

                              What did I do wrong?

                              1 Reply Last reply
                              0
                              • SGaistS Offline
                                SGaistS Offline
                                SGaist
                                Lifetime Qt Champion
                                wrote on last edited by
                                #37

                                Are you sure mylayout is a QGridLayout ?

                                Interested in AI ? www.idiap.ch
                                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                1
                                • J Offline
                                  J Offline
                                  john_hobbyist
                                  wrote on last edited by john_hobbyist
                                  #38

                                  I have it like this:

                                  mylayout = QHBoxLayout()
                                  
                                  1 Reply Last reply
                                  0
                                  • SGaistS Offline
                                    SGaistS Offline
                                    SGaist
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #39

                                    So since it's a QHBoxLayout, why are you trying to use it like a grid layout ?

                                    The error message tells you exactly the problem you have. If you read the method documentation, you'll see that the second parameter shall be a value from the Alignment enum.

                                    Interested in AI ? www.idiap.ch
                                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    1 Reply Last reply
                                    1
                                    • J Offline
                                      J Offline
                                      john_hobbyist
                                      wrote on last edited by
                                      #40
                                      This post is deleted!
                                      JonBJ 1 Reply Last reply
                                      0
                                      • J john_hobbyist

                                        This post is deleted!

                                        JonBJ Offline
                                        JonBJ Offline
                                        JonB
                                        wrote on last edited by JonB
                                        #41

                                        @john_hobbyist said in Displaying real-time data on a 2nd window:

                                        mylayout.addWidget(self.imageviewer, 1, 1)

                                        You're not reading @SGaist's replies and understanding/acting on them. Anyway, what do you intend this line to do?

                                        1 Reply Last reply
                                        1
                                        • J Offline
                                          J Offline
                                          john_hobbyist
                                          wrote on last edited by
                                          #42

                                          @SGaist @JonB: You are right!!!! Thanks!

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved