abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    včera 17:44 | Nová verze

    Linuxová distribuce OpenMandriva byla vydána ve verzi ROME 23.03. Název ROME říká, že se jedná se o průběžně aktualizovanou (rolling) edici. Stabilní edice nese název Rock, aktuálně OpenMandriva Lx 4.3 Dysprosium.

    Ladislav Hagara | Komentářů: 0
    včera 17:33 | Pozvánky

    Tento pátek od 14:00 proběhne v Brně na FI MUNI konference DevConf Mini. Na programu je celá řada zajímavých přednášek od testování releasů Fedory, přes super počítače nebo Big Data, až po závody autonomních aut. Konferenci bude možné sledovat i na online streamu.

    joejoe | Komentářů: 0
    včera 15:00 | Zajímavý článek

    Minulý týden proběhla hackerská soutěž Pwn2Own Vancouver 2023. Adobe Reader, Microsoft SharePoint, Oracle VirtualBox, Tesla, Ubuntu Desktop, Windows 11, macOS, Microsoft Teams, VMWare Workstation. Vše hacknuto. Synacktiv získal 530 000 dolarů a Teslu Model 3.

    Ladislav Hagara | Komentářů: 5
    včera 07:00 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného 3D softwaru Blender. Přehled novinek i s náhledy v oznámení o vydání a na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 06:00 | Nová verze

    Po 5 měsících vývoje od vydání verze 6.1 byla vydána nová verze 6.2 svobodného open source redakčního systému WordPress. Kódové jméno Dolphy bylo vybráno na počest amerického jazzového altsaxofonisty, flétnisty a basklarinetisty Erica Dolphyho.

    Ladislav Hagara | Komentářů: 0
    29.3. 21:44 | IT novinky

    Josef Průša představil (YouTube) novou 3D tiskárnu Original Prusa MK4. Cena sestavené tiskárny je 27990 Kč. Cena stavebnice je 20990 Kč.

    Ladislav Hagara | Komentářů: 5
    29.3. 19:00 | Nová verze

    Turris OS, operační systém pro síťová zařízení Turris postavený na OpenWrt, byl vydán v nové verzi 6.3.0. Vývojáři upozorňují, že Netmetr byl nahrazen LibreSpeedem, viz příspěvek na blogu CZ.NIC.

    Ladislav Hagara | Komentářů: 0
    29.3. 17:33 | Bezpečnostní upozornění

    Byl vydán xorg-server 21.1.8 a xwayland 22.1.9 a 23.1.1. Řešena je zranitelnost CVE-2023-1393 využitelná k lokální eskalaci práv.

    Ladislav Hagara | Komentářů: 5
    29.3. 15:00 | Nová verze

    Byla vydána nová verze 10 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v cgitu.

    Ladislav Hagara | Komentářů: 0
    28.3. 22:33 | Komunita

    Ubuntu Cinnamon bude od Ubuntu 23.04 oficiální odnoží Ubuntu (návrh, schválení).

    Ladislav Hagara | Komentářů: 4
    Používáte WSL (Windows Subsystem for Linux)?
     (73%)
     (12%)
     (3%)
     (11%)
    Celkem 376 hlasů
     Komentářů: 7, poslední 28.3. 17:34
    Rozcestník


    Dotaz: PyQT4 a vlákna

    19.1.2008 14:57 Jirka
    PyQT4 a vlákna
    Přečteno: 392×
    Dobrý den,

    dělám programy, které spolu komunikují přes sockety (klient/server) a klienta jsem se rozhodnul udělat i v grafice. Tak jsem zkusil PyQT4, ale zasekl jsem se na jednom problému:

    V programu musí pořád běžet jedno vlákno (nekonečný cyklus), které přijímá zprávy od serveru. A tyto zprávy pak potřebuji zobrazit v grafice, jenže tam mi to vždycky vyhodí error. Dám sem příklad, který jsem hodně ořezal:
    from PyQt4 import QtCore, QtGui
    import sys
    import threading
    import time
        
    class oknoHlavni:
    
        def __init__(self):
    
            self.klient = klient(self)
    
            ##########################
            ## Hlavni okno programu ##
            ##########################
            
            self.app = QtGui.QApplication(sys.argv)
            self.mainWindow = QtGui.QMainWindow()
            self.mainWindow.setWindowTitle("Moje okno")
            self.mainWidget=QtGui.QWidget(self.mainWindow)
            self.mainWindow.setCentralWidget(self.mainWidget)
            self.layout=QtGui.QGridLayout(self.mainWidget)
    
            #################
            ## WIDGET CHAT ##
            #################
    
            self.widgetChat=QtGui.QWidget(self.mainWidget)
            self.layout.addWidget(self.widgetChat,1,0,1,1)
            
            self.layoutChat=QtGui.QGridLayout(self.widgetChat)
    
            # okno na zpravy - sklo
            self.chatSklo=QtGui.QTextEdit(self.widgetChat)
            self.chatSklo.setReadOnly(True)
            
            # prida objekty do layoutu
            self.layoutChat.addWidget(self.chatSklo,1,0,1,3)
    
            self.obnoveniOkna()
            self.klient.start()
            
    
        def obnoveniOkna(self):
            self.mainWindow.show()       
            
    
        def skloZapisText(self, text):
            print "skloZapisText: ", text
            self.chatSklo.setText(text)   
    
    class klient:
    
        def __init__(self, rodic):
            self.grafika = rodic
        
        def start(self):
            v1 = threading.Thread(target = self.vlakno)
            v1.start()
        
        def vlakno(self):
            print "Vlakno"    
            for i in range(50):
                time.sleep(0.5)
                self.grafika.skloZapisText("Vlakno..."+str(i))
        
        
    grafika = oknoHlavni()
    
    sys.exit(grafika.app.exec_())
    
    Program vypíše:
    Vlakno

    skloZapisText: Vlakno...0

    QObject: Cannot create children for a parent that is in a different thread. Atd...
    Předem díky za rady :-)

    Odpovědi

    okbob avatar 19.1.2008 20:30 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: PyQT4 a vlákna
    Zdar, neco podobneho jsem resil na .NETu. Jde o to, ze s GUI muze primo komunikovat pouze jeden thread. Na .NETu se to resi skrz jakousi proxy.
    Luboš Doležel (Doli) avatar 20.1.2008 02:06 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: PyQT4 a vlákna
    Dělat to takhle je fuj, od čeho jsou sloty/signály.
    22.1.2008 21:19 Jirka
    Rozbalit Rozbalit vše Re: PyQT4 a vlákna
    A mohl bys mi, prosím, ukázat, jak to mám udělal přes ty sloty a signály? Signály a sloty umím použít třeba jen pro stisknutí tlačítka apod.

    Zkusil jsem toto:

    A do druhé třídy (klient) bych dal toto:

    self.grafika(QtCore.SIGNAL("progress(int)"), nejake_cislo)

    Do první třídy (oknoHlavni) bych dal toto:

    self.app.connect(?co sem?, QtCore.SIGNAL("progress(int)"), self.skloZapisText)

    Jenže co mám dát jako první parametr?
    mess avatar 22.1.2008 21:51 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
    Rozbalit Rozbalit vše Re: PyQT4 a vlákna
    Kdyby by ta třída klient dědila od QtCore.QObject, tak by se dal vyvolat vlastní signál přes self.emit. Více tady. A tady máš referenční příručku ke všem PyQt4 třídám.
    Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
    Luboš Doležel (Doli) avatar 22.1.2008 22:00 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: PyQT4 a vlákna
    class klient : public QThread
    {
    Q_OBJECT
    signals:
        void addText(QString text);
        // atd.
    };
    
    class oknoHlavni : public Q...
    {
    Q_OBJECT
    slots:
        void textReceived(QString text);
    };
    
    // a pak někde
    connect(m_pClient, SIGNAL(addText(QString)), this, SLOT(textReceived(QString)));
    
    // posílání:
    emit addText(nejakyText); // šlo mi snad i bez emit (?)
    
    (Sorry, ale Python fakt ne-e.)
    grubber avatar 22.1.2008 21:37 grubber | skóre: 6 | blog: grubber | Břeclav / Brno
    Rozbalit Rozbalit vše Re: PyQT4 a vlákna
    Kdyz uz to pises s Qt, nebylo by lepsi pro vlakna pouzit QtCore.QThread misto threading.Thread? (strilim od boku, Qt znam jen z C++)
    kozzi avatar 22.1.2008 22:01 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: PyQT4 a vlákna
    Bylo ale tomu nerikej :-D
    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.