Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Solved When Use @Slot(), sender has NoneType.

    Qt for Python
    2
    4
    799
    Loading More Posts
    • 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.
    • K
      klyjm last edited by

      Recently, I find when I use @Slot() before a function, the sender() in function will return NoneType. And if I don't use it, everything is OK, is this a bug?

      @Slot()
      def select_leg_button_clicked(self):
          self.repaint()
          button = self.sender()
      

      Just like this, the button will be NoneType.
      But if I don't use slot, just like:

      #@Slot()
      def select_leg_button_clicked(self):
          self.repaint()
          button = self.sender()
      

      sender() works well. Is this a bug? Because the example for Pyside2 says we should use @Slot() to reduce some error.

      1 Reply Last reply Reply Quote 0
      • Denni 0
        Denni 0 Banned last edited by Denni 0

        Okay I work with PyQt5 but it is a lot like PySide2 that being said and not seeing the rest of your code I would say no its not a bug in the code but a bug in the documentation. Kind of like where the official documentation says you ought to sub-class a QThread when in actuality that is absolutely the wrong way to do it.

        Next it appears that this is perhaps the function that a QPushButton calls if so then you definitely do not need the @Slot() decorator because the @Slot() decorator means its a catcher for a Signal which I do not see defined nor implemented here. So I am going to guess you are not using Signals/Slots in which case you have no need for the @Slot() decorator.

        1 Reply Last reply Reply Quote 0
        • K
          klyjm last edited by

          I use connect to connect the signal and slot,.In my code, it is a radiobutton, here is my code:

          self.left_button = QRadioButton('l')
          self.left_button.clicked.connect(self.select_leg_button_clicked)
          

          This is also the recommended way to connect signal and slot, I think I'm using Signals/Slots. Is there any wrong?

          1 Reply Last reply Reply Quote 0
          • Denni 0
            Denni 0 Banned last edited by Denni 0

            Okay to use a @Slot() you need to use a Signal. The connect you are using is not an in code Signal as you have not defined it as such that is just a standard connect that connects your function to a system Signal which seems to be handled differently. Yeah sort of the same thing but not the same thing. This is a basic in code Signal/Slot definition where the MySignal is defined within the Class and used where the Class is instantiated and that is also where the Slot would be defined

            MySignal = Signal()
            
            self.Class.MySignal.connect(self.select_leg)
            
            @Slot()
            def select_leg(self):
                pass
            

            This is how you would declare a standard Button and I assume a Radio Button is pretty much the same

            self.btnLeft = QPushButton('Left')
            self.btnLeft.clicked.connect(self.select_leg)
            
            def select_leg():
                pass
            

            Again while similar they are not the same. I have never had to add a Slot decorator to a function associated with a connect to a predefined object that uses event signals in fact doing so has always caused an error but I have always had to use the Slot decorator when it is associated with a custom in my code defined signal. You can either accept that or continue to struggle with trying to add that @Slot decorator to your function. Of course I am no Guru when it comes to PyQt by any measure (and have never used PySide2) but so far I have seen nothing that contradicts what I have just shown you. If you do find something let me know and I will take a look. Just keep in mind their documentation is not always spot on.

            1 Reply Last reply Reply Quote 0
            • First post
              Last post