Thread View: pl.comp.lang.python
9 messages
9 total messages
Started by zigi
Thu, 14 Oct 2010 09:29
PyQT wątki
Author: zigi
Date: Thu, 14 Oct 2010 09:29
Date: Thu, 14 Oct 2010 09:29
68 lines
3152 bytes
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
Author: Daniel Mróz
Date: Thu, 14 Oct 2010 10:20
Date: Thu, 14 Oct 2010 10:20
42 lines
2230 bytes
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
Author: zigi
Date: Thu, 14 Oct 2010 11:27
Date: Thu, 14 Oct 2010 11:27
3 lines
1476 bytes
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
Author: zigi
Date: Thu, 14 Oct 2010 11:30
Date: Thu, 14 Oct 2010 11:30
7 lines
1691 bytes
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
Author: zigi
Date: Thu, 14 Oct 2010 11:36
Date: Thu, 14 Oct 2010 11:36
15 lines
2081 bytes
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
Author: klops
Date: Sat, 16 Oct 2010 18:47
Date: Sat, 16 Oct 2010 18:47
5 lines
1388 bytes
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
Author: klops
Date: Sun, 17 Oct 2010 11:39
Date: Sun, 17 Oct 2010 11:39
5 lines
1383 bytes
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
Author: zigi
Date: Mon, 18 Oct 2010 11:15
Date: Mon, 18 Oct 2010 11:15
3 lines
1468 bytes
1468 bytes
Ok. Przetestuje i dam znać. Wielkie dzięki.
Re: PyQT wątki
Author: zigi
Date: Tue, 19 Oct 2010 08:12
Date: Tue, 19 Oct 2010 08:12
3 lines
1553 bytes
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