PyQT, CXfreeze ja prosessit

Hei
Kysymys PyQT ohjelman sammutuksesta.
Esimerkkikoodi toimii melkein halutulla tavalla. IDE:stä (Eric5) ajettuna ohjelma käynnistyy ja sammuu kymmenen sekunnin kuluttua, jos sitä ennen ei paineta sammutusnappulaa. Painettaessa nappulaa ohjelma sammuu heti.
Windows Task Managerin välilehdellä Applications näkyy ohjelman käynnistyminen ja sammuminen. Välilehdellä Processes niitä ei näy.

Kun ohjelmasta tekee ajettavan “paketin” CXfreeze ohjelmalla
cxfreeze sammutus.pyw --base-name=Win32GUI --target-dir paketti
(HUOM --base-name=Win32GUI siis ei dos ikkunaa)

Task Managerin Application välilehdellä näkyy ohjelman käynnistyminen ja sammuminen. Sen lisäksi Processes välilehdellä näkyy ohjelman käynnistyminen, mutta prosessi ei sammu, kun ohjelma sammuu Application puolella. Zombi prosessi?

Käynnistettäessä ohjelma uudelleen syntyy toinen prosessi.

Siis miten koodia on korjattava, jotta sen prosessi sammuu viimeistään wait ajan loputtua.

(Kysymys liittyy aikaisempaan kysymykseen PyQT ja ikkunan näkyminen)

[code]from PyQt4 import QtGui
from PyQt4.QtGui import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtTest import QTest
import sys

class GuiPart(QDialog):
def init(self, parent=None):
super(GuiPart, self).init(parent)
self.koeButton = QPushButton(“Paina”)
self.connect(self.koeButton, SIGNAL(“clicked()”), self.nappula)

    self.grid = QGridLayout()
    self.grid.addWidget(self.koeButton, 2, 0 )
    self.setLayout(self.grid) 
    self.setWindowTitle("Tutki sammutusta")
    
def nappula(self):
    self.close()
    
def koeFunktio(self):
    QTest.qWait(10000)
    self.close()

-------------------------------------------------------------------------

root = QtGui.QApplication(sys.argv)
client = GuiPart(None)
client.show()

client.koeFunktio()
sys.exit(root.exec_())[/code]

Ohjelmasi ei koskaan tule viimeiselle riville joka sammuttaa ohjelman. koska kutsut koeFunctiota aina ennen viimeistä riviä.

client.koeFunktio()
sys.exit(root.exec_())

lisää

def nappula(self):
    self.close()
    sys.exit(root.exec_())

sekä

def koeFunktio(self):
    QTest.qWait(10000)
    self.close()
    sys.exit(root.exec_())

Kiitos vastauksesta

En saanut koodia toimimaan halutulla tavalla ojeistasi huolimatta.
Edelleen Task Manageriin jää Process ikkunaan sammutus.exe näkyviin, vaikka ohjelma sammuu ja häviää Task MAnagerin Applications välilehdeltä.
Uudelleen käynnistettäessä sammutus.exe ilmestyy prosesseihin toinen sammutus.exe.
Noi ajettavat exe:t tehdään siis cxfreeze ohjelmalla.

Muutetut kohdat koodista

[code] def nappula(self):
self.close()
sys.exit(root.exec_())

def koeFunktio(self):
    QTest.qWait(10000)
    self.close()
    sys.exit(root.exec_()[/code])

[code]root = QtGui.QApplication(sys.argv)
client = GuiPart(None)
client.show()

client.koeFunktio()
sys.exit(root.exec_())[/code]

no kokeiles jättää nuo
self.close() pois…
en pysty kokeilemaan mitään exejä kun ei oo windowsia…

Jätin self.close rivit pois
Nyt ohjelma ei sammu automaattisesti 10s kuluttua
Nappulaa painettaessa IDE:n ikkunaan ilmestyy virheilmoitus
QCoreApplication::exec: The event loop is already running

self.closen ja sys.exit(root.exec_()) lisääminen nappula ja koeFunktioon tuntui järkevältä vaihtoehdolta. Olisikohan ongelma cxfreeze ohjelmassa, joka tekee tulkattavasta pythonista ajettavan exe:n

Kokeilitko sitten pelkästään Pythonilla? Jäikö python pyörimään taustalle.

En ihan tajunnut mitä tarkoitat, mutta kerrotaan että IDE:ssä ajettaessa (Eric5) Task Manager Aplication välilehdellä näkyy ohjelman käynnistyminen ja sammuminen .Process välilehdelle se ei ilmesty.

Täytyy tutkia vielä tarkemmin

Tarkoitin sitä, että jos ajat sen koodin normaalisti:

python koodi.py

toimiiko se oikein vai käykö vastaavasti että se jää taustalle pyörimään (tai mikä nyt onkaan ongelma).

[quote=toimiiko se oikein vai käykö vastaavasti että se jää taustalle pyörimään (tai mikä nyt onkaan ongelma).[/quote]
DOS ikkunasta ajettuna käskyllä python koodi.pyw ohjelma käynnistyy ja sammuu. Itse DOS ikkunaan ei tule ohjelman sammuttua promptia tms. Task Managerin Prosessit välilehdellä ei näy koodi.pyw käynnistyminen ja sammuminen.