Seite 1 von 1

Slot parameter haben den Typ nicht die Values

Verfasst: Donnerstag 19. März 2020, 16:45
von bitmastah
Hi euch draußen an den Kisten,

die Situation ist folgende:
python 3.5, pyqt5

Das Signal wird emitiert, der Slot wird aufgerufen,
aber die Ausgabe in der Message Box ist:

Code: Alles auswählen

+-------------------------------------------+
| my msg_box                                |
+-------------------------------------------+
|                                           |
|  my strings: <class 'str'> <class 'str'>  |
|                                           |
|                                +------+   |
|                                |  OK  |   |
|                                +------+   |
|                                           |
+-------------------------------------------+
Warum? :oops:

BeispielCode: (sollte laufen, wenn ich mich nicht vertippt hab. typos dürfen behalten werden)

Ich dank euch schon mal für eure Zeit und vielleicht auch einen Hinweis...

bitmastah

signal_sender.py

Code: Alles auswählen

# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# author: bitmastah
# -----------------------------------------------------------------------------

from PyQt5 import QObject, pyqtSignal
from PyQt5.QtWidgets import QMessageBox

class SignalSender(QObject):
  my_signal = pyqtSignal(str, str, name="my_signal")
  
  def __init__(self):
    super().__init__()
    self.my_signal.emit("test1", "test2")
main_window.py

Code: Alles auswählen

# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# author: bitmastah
# -----------------------------------------------------------------------------
import PyQt5.QtCore
import PyQt5.QtGui
import PyQt5.QtWidgets

from signal_sender import SignalSender

class MainWindow(PyQt5.QtWidgets.QMainWindow):
  def __init__(self):
    super(MainWindow, self).__init__()
    
    self.my_signal_sender_object = SignalSender()
    self.my_signal_sender_object.my_signal.connect(self.my_slot(str, str))
  
  @PyQt5.QtCore.pyqtSlot(str, str)
  def my_slot(self, msg1, msg2):
    msg_box = QMessageBox()
    msg_box.setText("my strings: {} {}".format(msg1, msg2))
    msg_box.exec()

Re: Slot parameter haben den Typ nicht die Values

Verfasst: Donnerstag 19. März 2020, 16:51
von __deets__
Du rufst my_slot *auf*, und das mit zwei str-Typ-Objekten als Argument. Dieser Aufruf muss aus der Verbindung *raus*. Slots bekommen ueblicherweise keine Signatur, das ist nur fuer Signale (in Python jedenfalls) relevant. Entferne also einfach (str, str) und dann sollte der Teil zumindest gegessen sein. Schlechte Bezeichner wie "my_" oder numerierte Namen (msg1, msg2) sollten auch nicht sein.

Re: Slot parameter haben den Typ nicht die Values

Verfasst: Donnerstag 19. März 2020, 17:02
von bitmastah
Hi danke für deine Antwort _deets__

das mit der Benamsung ist zur Kenntnis genommen und ich gelobe feierlich Besserung. Aber als extrahierter Beispielcode... da hab ichs mit PEP8 nicht so genau genommen...

habe folgendes probiert:
self.my_signal_sender_object.my_signal.connect(self.my_slot()) --> error_slot() missing 2 required positional arguments msg1 and msg2
self.my_signal_sender_object.my_signal.connect(self.my_slot) --> der Slot wird nicht aufgerufen.

Re: Slot parameter haben den Typ nicht die Values

Verfasst: Donnerstag 19. März 2020, 17:42
von __deets__
Die zweite Form ist die richtige, und natuerlich wird in dem Moment der Slot nicht aufgerufen. Warum sollte er? Dazu muss das my_signal feuern. Tut es das? Und warum heisst bei dir alles my?

Re: Slot parameter haben den Typ nicht die Values

Verfasst: Donnerstag 19. März 2020, 18:09
von bitmastah
Ist so ne Unart wenn ich Beispielcode schreibe. Sorry nochmal dafür. Ich hoff damit sind wir dann durch. Mea Culpa!

In signal_sender.py wird doch self.my_signal.emit("test1", "test2") gemacht. was wahrscheinlich zu früh ist, weil das schon im __init__ passiert und da der slot noch nicht verbunden ist.
werd ich nachher mal ausprobieren.

Erst mal vielen Dank. Ich geb dann Bescheid, wenns geht. :-)

bitmastah

Re: Slot parameter haben den Typ nicht die Values

Verfasst: Donnerstag 19. März 2020, 18:25
von __deets__
Das ist dann zu frueh, ja.

Erledigt: Slot parameter haben den Typ nicht die Values

Verfasst: Freitag 20. März 2020, 10:29
von bitmastah
Hallo __deets__,

läuft, wenn das event später gefeuert wird.

Nochmal danke
bitmastah