Signály mezi třídami pyqt – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Signály mezi třídami pyqt – Python – Fórum – Programujte.comSignály mezi třídami pyqt – Python – Fórum – Programujte.com

 

František
~ Anonymní uživatel
33 příspěvků
27. 2. 2013   #1
-
0
-

Ahoj,

problém, který řeším:

Mám dvě třídy (MainWindow a Thread). Dejme tomu, že v threadu každé dvě sekundy budu emitovat signál s nějakou hodnotou a potřebuji ho připojit třeba na label. Prosím neřešte proc to je v threadu. Jde mi o příklad. Všechny příklady na netu jsou typu : signál stisknutí tlačítka udelá to a to. Ale to mi moc nepomůže. Já potřebuji nějak emitovat signál z jiné třídy v pyqt a v druhé s ním něco udělat.

Díky za každou radu.

Nahlásit jako SPAM
IP: 89.102.7.–
sairon0
Newbie
27. 2. 2013   #2
-
0
-

Ahoj,

s PySide jsem si nedávno hrál a protože podobný problém brzo budu taky řešit, cvičně jsem napsal kraťoučký program na vyzkoušení. Evidentně s PySide a signály máš zkušenost, tak kód snad nebude potřebovat rozsáhlejší komentář, pokud ano, klidně dovysvětlím. Jde jen o to, že ve třídě nadefinuješ signál, který emituješ a v druhé třídě na něj jednoduše napojíš pomocí connect metodu, která od něj zpracuje data. Příklad je trochu delší, ale Tebe budou zajímat jen poslední tři řádky v initu MainWindow a třída Thread, zbytek je GUI a blbiny okolo :)

import time
from PySide.QtGui import QWidget, QMainWindow, QApplication, QHBoxLayout, QLabel
from PySide.QtCore import QThread, Signal, Qt
import sys


class Thread(QThread):
    dataSignal = Signal(object)

    def run(self):
        while True:
            self.generate_data()
            self.dataSignal.emit(self.data)

    def generate_data(self):
        self.data = time.ctime()
        time.sleep(5)


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # GUI
        centralWidget = QWidget()
        layout = QHBoxLayout()
        layout.addWidget(QLabel("Time: "))
        self.timeLabel = QLabel("?")
        layout.addWidget(self.timeLabel)
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)
        # thread a zpracovani
        self.thread = Thread()
        self.thread.dataSignal.connect(self.present_data, Qt.QueuedConnection)
        self.thread.start()

    def present_data(self, data):
        self.timeLabel.setText(data)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
Nahlásit jako SPAM
IP: 62.245.90.–
františek
~ Anonymní uživatel
33 příspěvků
28. 2. 2013   #3
-
0
-

#2 sairon
Ahoj, díky moc za ukázku. Zatim se mi to sice nepodařilo rozchodit. Píšu to v linuxu ve vim a porad mi to háže chyby. Nainstaloval jsem už snad všechny balíčky a pořád nic....tak budu nad tím dál hloubat. Zlaté VS.

Každopádně ještě jednou dík. Dám vědět, jak jsem pochodil:)

Nahlásit jako SPAM
IP: 81.30.229.–
sairon0
Newbie
2. 3. 2013   #4
-
0
-

Nevím, jakou verzi Pythonu používáš, já to teď momentálně zkoušel v posledním Ubuntu v Pythonu 2.7.3, stačilo doinstalovat metapackage python-pyside a šlape bez problémů. S PySide v Pythonu 3 zkušenosti nemám. Pokud by se problém zdál neřešitelný, neboj se zeptat.

Nahlásit jako SPAM
IP: 88.102.115.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Spojení mezi slovníkem a pyqt — založil František

Komunikace mezi třídami — založil rich

Předání hodnot mezi třídami — založil roman.jaros

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý