🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
9 messages
9 total messages Started by zigi Thu, 14 Oct 2010 09:29
PyQT wątki
#27744
Author: zigi
Date: Thu, 14 Oct 2010 09:29
68 lines
3152 bytes
Witam
próbuje zahaczyć temat wielowątkowości w PyQT napisałem prosty stoper
oparty o 2 wątki. Pojawiły się nieoczekiwane problemy.
Gdy w grę wchodzi 1 wątek w głównej klasie stoper działa w/g
zamierzonego planu, w momęcie gdy tworzę drugi wątek tutaj klasa
Stoper().

Mimo stworzenia obiektu klasy zawierającej główne okno programu tutaj
klasa StoperWindow() i odwołaniu się do metody tej klasy nie uzyskuje
oczekiwanych resultatów.

Chciałbym aby informacje stopera były widoczne w polu tekstowym
zawartym w metodzie  insert_text() instancji obiektu klasy BaseWindow,
wyniki są przekazwane do tej metody jednak
nie pojawiają sie w polu teksowym.



class StoperWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
	QtGui.QWidget.__init__(self, parent)
	self.ui = Ui_MainWindow()
	self.ui.setupUi(self)
	
QtCore.QObject.connect(self.ui.actionStart,QtCore.SIGNAL("activated()"),
self.start_clock)
	return

    def start_clock(self):
	stoper = Stoper()
	stoper.start()
	return

    def insert_text(self, sekunda):
	self.ui.textEdit.insertPlainText(QtCore.QString("%s\n" % sekunda))
	app.processEvents()
	return


class Stoper(QThread):
     def __init__(self, parent = None):
	self.window_clock = StoperWindow()
        QThread.__init__(self, parent)
	return

     def run(self):
	self.easy_clock(0,0,0)
	return

     def easy_clock(self, sekunda, minuta, godzina):
	time.sleep(1)
	sekunda +=1
	if sekunda > 60:
	   minuta +=1
	   sekunda = 0
	if minuta > 60:
	   godzina +=1
	self.window_clock.insert_text(sekunda)
	self.easy_clock(sekunda, minuta, godzina)
        return



if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StoperWindow()
    myapp.show()
    sys.exit(app.exec_())
Re: PyQT wątki
#27745
Author: Daniel Mróz
Date: Thu, 14 Oct 2010 10:20
42 lines
2230 bytes
On 14.10.2010, zigi <cezar4846@gmail.com> wrote:
> próbuje zahaczyć temat wielowątkowości w PyQT napisałem prosty stoper
> oparty o 2 wątki. Pojawiły się nieoczekiwane problemy.
> Gdy w grę wchodzi 1 wątek w głównej klasie stoper działa w/g
> zamierzonego planu, w momęcie gdy tworzę drugi wątek tutaj klasa
> Stoper().
Nie znam się na Qt, ale to chyba jest bez sensu:


> class StoperWindow(QtGui.QMainWindow):
>     def __init__(self, parent=None):
> 	QtGui.QWidget.__init__(self, parent)
> 	self.ui = Ui_MainWindow()
> 	self.ui.setupUi(self)
> 	
> QtCore.QObject.connect(self.ui.actionStart,QtCore.SIGNAL("activated()"),
> self.start_clock)
> 	return
>
>     def start_clock(self):
> 	stoper = Stoper()
Tutaj tworzysz stoper w StoperWindow...

> class Stoper(QThread):
>      def __init__(self, parent = None):
> 	self.window_clock = StoperWindow()
W Stoper utworzonym w StoperWindow tworzysz nowy StoperWindow...

> 	self.window_clock.insert_text(sekunda)
I odpalasz insert_text w StoperWindow.Stoper.StoperWindow...

Ja tu nie widzę sensu.


Pozdrawiam
Beorn

-- 
Daniel 'Beorn' Mróz <beorn@alpha.pl>    http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V!  PS+ PE++ Y+ PGP++ t- 5  X R !tv b+ DI D++ G++ e h*]
[                          r++  y+                           ]
Re: PyQT wątki
#27746
Author: zigi
Date: Thu, 14 Oct 2010 11:27
3 lines
1476 bytes
Robiłem to na podstawie tego tutoriala

http://www.python.rk.edu.pl/w/p/wielowatkowe-aplikacje-z-qthread/
Re: PyQT wątki
#27747
Author: zigi
Date: Thu, 14 Oct 2010 11:30
7 lines
1691 bytes
Faktycznie to jest bez sensu

QtCore.QObject.connect(self.ui.actionStart,QtCore.SIGNAL("activated()"),
> self.start_clock)
>    return

wkradło  mi sie podczas różnych prób :-)
Re: PyQT wątki
#27748
Author: zigi
Date: Thu, 14 Oct 2010 11:36
15 lines
2081 bytes
To jest tak tworzę
 self.window_clock = StoperWindow()
w Stoper aby mieć dostęp przez obiekt do metody która wstawia tekst w
polu tekstowym

To
 
QtCore.QObject.connect(self.ui.actionStart,QtCore.SIGNAL("activated()"),self.start_clock)
 jest sygnał ktory tworzy nowy wątek
 stoper = Stoper()
        stoper.start()

który powinien wyliczać czas oraz przekazywać infomacje do klasy która
dzidziczy po  QtGui.QMainWindow czyli StoperWindow() gdzie jest
zaimplementowane grafika aplikacji.
Re: PyQT wątki
#27749
Author: klops
Date: Sat, 16 Oct 2010 18:47
5 lines
1388 bytes
Trochę się pobawiłem tym problemem.

W załączniku masz prawie działający przykład. Prawie bo nie wiem czemu 
ale u mnie Python twierdzi, że nie ma klasy QString... Dlatego linia 23 
jest taką atrapą, a to co powinno się tam dziać jest wyłączone w lini 24.
Re: PyQT wątki
#27750
Author: klops
Date: Sun, 17 Oct 2010 11:39
5 lines
1383 bytes
Trochę się pobawiłem tym problemem.

W załączniku masz prawie działający przykład. Prawie bo nie wiem czemu 
ale u mnie Python twierdzi, że nie ma klasy QString... Dlatego linia 23 
jest taką atrapą, a to co powinno się tam dziać jest wyłączone w lini 24.
Re: PyQT wątki
#27751
Author: zigi
Date: Mon, 18 Oct 2010 11:15
3 lines
1468 bytes
Ok.
Przetestuje i dam znać.
Wielkie dzięki.
Re: PyQT wątki
#27752
Author: zigi
Date: Tue, 19 Oct 2010 08:12
3 lines
1553 bytes
Super wszyściutko działa.
Pięknie  śmiga
Wielkie wielkie dzięki.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads