как настроить вывод функции в виде сигнала в pyqt5 - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу отобразить зарегистрированного пользователя os.getlogin(), отображаемого в виджете ярлыка.

Пока что мне нужно установить собственный сигнал и подключить его к метке

вот мой (не функционирующий) код, надеюсь, вы поможете мне правильно его написать

import sys
import os

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg



class UserTest(qtw.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # your code will go here

        user_in_label = qtw.QLabel()

        layout = qtw.QVBoxLayout()

        layout.addWidget(user_in_label)

        # funktionen

        self.trigger = qtc.pyqtSignal(str)


        # fire signal to slot
        self.set_signal.connect(user_in_label.setText)


        # your code ends here
        self.show()

    def set_signal(self):
        active_user = os.getlogin()
        self.trigger.emit(active_user)

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = UserTest()
    sys.exit(app.exec_())


self.set_signal.connect(user_in_label.setText) в этой строке отсутствует объект, мне нужно установить новый класс для этого дубля, похоже на вздор

1 Ответ

0 голосов
/ 10 февраля 2020

Попробуйте:

import sys
import os
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg


class UserTest(qtw.QWidget):

    trigger = qtc.pyqtSignal(str)                                             # +++

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        user_in_label = qtw.QLabel()

        layout = qtw.QVBoxLayout(self)                                         # + self
        layout.addWidget(user_in_label)
        layout.addWidget(qtw.QPushButton('Click me', clicked=self.set_signal)) # +++

        self.trigger.connect(user_in_label.setText)                            # +++

    def set_signal(self):
        active_user = os.getlogin()
        self.trigger.emit(active_user)


if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = UserTest()
    w.show()
    sys.exit(app.exec_())

enter image description here


Обновление

банка Вы объясняете, почему вы перемещаете триггер = qt c .pyqtSignal (str) выше init? и какие-либо предложения, как автоматически установить активного пользователя на ярлык без кнопки pu sh?

trigger должен быть атрибутом класса

import sys
import os
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg


class UserTest(qtw.QWidget):

    trigger = qtc.pyqtSignal(str)                                            

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        user_in_label = qtw.QLabel()

        layout = qtw.QVBoxLayout(self)                                         
        layout.addWidget(user_in_label)
#        layout.addWidget(qtw.QPushButton('Click me', clicked=self.set_signal)) 

        self.trigger.connect(user_in_label.setText)                            

        self.set_signal()                                                # +++

    def set_signal(self):
        active_user = os.getlogin()
        self.trigger.emit(active_user)


if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = UserTest()
    w.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...