Sida 1 av 1

Python sys.exit()

Postat: 2 mars 2017, 11:35:41
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)

Re: Python sys.exit()

Postat: 2 mars 2017, 12:14:35
av sodjan
Sidan du länkar till har ju med sys.exit() i sina exempel... :humm:

Re: Python sys.exit()

Postat: 2 mars 2017, 12:22:08
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

Re: Python sys.exit()

Postat: 2 mars 2017, 12:25:29
av sodjan
Ah, OK... :-)

Men det är ju bara sidan innan. Via "The next tutorial:"
så kommer man ju till sidan med sys.exit()...

Re: Python sys.exit()

Postat: 2 mars 2017, 13:02:42
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.

Re: Python sys.exit()

Postat: 2 mars 2017, 13:49:57
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%

Re: Python sys.exit()

Postat: 2 mars 2017, 21:06:43
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

Re: Python sys.exit()

Postat: 2 mars 2017, 21:36:02
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

Re: Python sys.exit()

Postat: 4 mars 2017, 07:13:57
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 ;)

Re: Python sys.exit()

Postat: 6 mars 2017, 21:48:53
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

Re: Python sys.exit()

Postat: 7 mars 2017, 05:06:38
av thebolt
Antingen trådar (svårare) eller periodiska timers (lättare).

Ta en titt på QTimer.