Python sys.exit()

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Python sys.exit()

Inlägg av Oltronix »

Försöker lära med lite python via
https://pythonprogramming.net/applicati ... t-tutorial

Kod: Markera allt

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
window.show()
Denna kod generar inget fel men heller inte något fönster som är förväntat. Dock om jag lägger till
"sys.exit(app.exec_())" sist i koden dyker det upp ett fönster. "sys.exit(app.exec_())" hittade jag i ett annat exempl.
-Vad kan felet vara?
-Vad gör sys.exit(app.exec_())? Jag har sök efter detta men inte hittat något vettigt.

Jag kör umbuntu 15.10 o python2.7 (försökt med python3 men då hittas inte Qt4bibliotek)
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Python sys.exit()

Inlägg av sodjan »

Sidan du länkar till har ju med sys.exit() i sina exempel... :humm:
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Python sys.exit()

Inlägg av Oltronix »

Sorry det var där jag hittade sys.exit...
https://pythonprogramming.net/basic-gui-pyqt-tutorial/
Här är sidan för exemplet jag försöker få i luften
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Python sys.exit()

Inlägg av sodjan »

Ah, OK... :-)

Men det är ju bara sidan innan. Via "The next tutorial:"
så kommer man ju till sidan med sys.exit()...
thebolt
Inlägg: 248
Blev medlem: 10 februari 2008, 17:41:40
Ort: Taipei Taiwan

Re: Python sys.exit()

Inlägg av thebolt »

sys.exit(..) avslutar processen och sätter retur-koden till sitt argument, det är inte det viktiga i det här fallet.. Det viktiga är metoden som anropas _innuti_ sys.exit, dvs app.exec_()

Qt är event-drivet med en event-loop som ligger och pollar events och sen agerar på dem. För att starta processingen av event måste du anropa app.exec_(), som returnerar när applikationen stängs. Dvs, app.exec_() är det som "kör" hela applikationen, sys.exit(..) sätter returkoden till det som app.exec_() returnerar (vanligen 0) och avslutar python-processen.
bearing
Inlägg: 11232
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Python sys.exit()

Inlägg av bearing »

Deras exempel hade kanske varit tydligare ifall de skrivit:

Kod: Markera allt

returncode = app.exec_() #Run app and save returncode
sys.exit(returncode)     #Exit with code
Om du använder windows och kör dit pythonskript från cmd can du få fram returkoden såhär:

Kod: Markera allt

>python fil.py
>echo %errorlevel%
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Python sys.exit()

Inlägg av Oltronix »

Aha jag trodde att "show()" drog igång den grafik man satt upp. Nu fattar jag lite hur "app.exec_()" och "sys.exit()" fungerar. Att exempelförfattaren inte behöver använda "app.exit()" i

Kod: Markera allt

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
window.show()
kan bero på att han kör Windwos och hans "idle-miljö" är annorlunda än min. Jag var väldigt störd att det fungerade olika hos mig och honom men har jag fått lite mer känsla på vad jag häller på med.

Tack för supporten
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Python sys.exit()

Inlägg av Oltronix »

Intressant att köra

Kod: Markera allt

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
window.setGeometry(50, 50, 500, 300)
window.setWindowTitle("Window-1")
window.show()

window2 = QtGui.QWidget()
window2.setGeometry(500, 500, 500, 300)
window2.setWindowTitle("Window-2!")
app.exec_()

window2.show()
app.exec_()

sys.exit()
och se hur man blir hängande på varje "app.exec_()" men det måste finnas mekanismer för att komma vidare i koden utan behöva slå ihjäl ett fönster men jag har inte kommit dit ännu eller det är väl så att man har knappar och dyligt i fönstret som anropar andra funktioner
thebolt
Inlägg: 248
Blev medlem: 10 februari 2008, 17:41:40
Ort: Taipei Taiwan

Re: Python sys.exit()

Inlägg av thebolt »

Nej, så snart du anropar app.exec_() så lämnar du över kontrollen till Qts event-loop. Därefter måste all exekvering antingen ske i en separat tråd (som du skapat innan, och den kan inte direkt interagera med GUIt) eller som reaktion på events som händer, och då måste du så klart ha registrerat event-handlers innan du startar.

Du ska bara ha en app.exec_() i din kod, allt annat är något fel ;)
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Python sys.exit()

Inlägg av Oltronix »

Så har man fönstret i en tråd och gör annat i andra trådar? Tex om man har ett fönster och man vill uppdatera ett mätvärde konternuerlig coh presentera det i fönstret
thebolt
Inlägg: 248
Blev medlem: 10 februari 2008, 17:41:40
Ort: Taipei Taiwan

Re: Python sys.exit()

Inlägg av thebolt »

Antingen trådar (svårare) eller periodiska timers (lättare).

Ta en titt på QTimer.
Skriv svar