Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Opgelost][Py] GUI en code scheiden (met oog op het web)  (gelezen 2728 keer)

[Opgelost][Py] GUI en code scheiden (met oog op het web)
« Gepost op: 2011/10/18, 13:08:01 »
Hallo,

Ik weer, met weer een python related vraag. Dus ik maak een programma dat python-code moet gaan uitspuwen.
Nu wil ik graag GUI code splitsen van de werkelijke logic. Dit omdat ik dan mogelijkheid heb om andere frameworks te gebruiken.

Want ik zou graag een optie aanbieden om makkelijk web apps te builden, maar ik heb geen idee hoe ik een gui met python kan maken, om een cgi app in de browser te hebben.
Een voorbeeld van wat mijn programma zou kunnen genereren:

Code: (GUI.py) [Selecteer]
#!/usr/bin/python
from gi.repository import Gtk
import logic
class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World")

        self.button = Gtk.Button(label="Click Here")
        self.button.connect("clicked", self.on_button_clicked)
        self.add(self.button)

    def on_button_clicked(self, widget):
        print logic.GetalPlus1(7)

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

Code: (logic.py) [Selecteer]
def GetalPlus1(x):
    return x+1


Maar nu zou ik graag een equivalent hebben dat ook op internet zou werken, maar ik heb daar wel niets van ervaring mee ofzo.
Iemand een idee?
« Laatst bewerkt op: 2011/10/22, 15:04:21 door Carharttguy »

Re: [Py] GUI en code scheiden (met oog op het web)
« Reactie #1 Gepost op: 2011/10/18, 13:21:12 »
Dan moet ge even zoeken naar wat Python webframeworks. Django, Pylons en Zope zijn bekenden, maar afhankelijk van hoe ingewikkeld uw programma is, kan het ook met het ingebouwde cgi: http://docs.python.org/library/cgi.html#module-cgi
Even Googlen brengt heel wat topics/mails over de voor en nadelen en gebruikersbevindingen.

Re: [Py] GUI en code scheiden (met oog op het web)
« Reactie #2 Gepost op: 2011/10/20, 08:34:06 »
Aha, dankje.

Maar ik denk dat het toch vrij moeilijk zal zijn om die gescheiden structuur vol te houden.
Als ik naar die CGI kijk, lijkt het alsof HTML gewoon kras met de code gemengd is.

En die frameworks, pfoew :p Ziet er niet gemakkelijk uit! Ik ga de boel nog eens goed moeten bekijken.
Ik begin er over te twijfelen of het niet beter is om de code in 3 te scheiden: 1 main, 1 gui en 1 logic. En de code dan starten met main.

Iemand ideeën over dit? Ik ben maar een python-noob  XD

Re: [Py] GUI en code scheiden (met oog op het web)
« Reactie #3 Gepost op: 2011/10/20, 10:35:46 »
Het idee van CGI is min of meer dat je gewoon een CLI-app hebt, die gestart wordt door de webserver, en de output (stdout) van die app wordt naar de client gestuurd. Dat betekent meestal dat je HTML output moet leveren vanuit je programma, voorafgegaan door HTTP headers...

De webserver levert de door de client gestuurde HTTP(-headers) als input aan het script.

Hoe dit in python verder gaat heb ik geen ervaring mee, mogelijk zijn er libraries voor...

Offline commandoline

  • LoCo-contact
    • marten-de-vries
    • Marten-de-Vries.nl
Re: [Py] GUI en code scheiden (met oog op het web)
« Reactie #4 Gepost op: 2011/10/21, 13:30:27 »
Aha, dankje.

Maar ik denk dat het toch vrij moeilijk zal zijn om die gescheiden structuur vol te houden.
Als ik naar die CGI kijk, lijkt het alsof HTML gewoon kras met de code gemengd is.

En die frameworks, pfoew :p Ziet er niet gemakkelijk uit! Ik ga de boel nog eens goed moeten bekijken.
Ik begin er over te twijfelen of het niet beter is om de code in 3 te scheiden: 1 main, 1 gui en 1 logic. En de code dan starten met main.

Iemand ideeën over dit? Ik ben maar een python-noob  XD
Even terug naar je beginpost. Je maakt een soort code generator programma. Als dat programma meerdere programma's kan uitspuwen (een webapp, een gtk app, een ... app) dan heb je main niet nodig. Als je ze allemaal in één programma wilt combineren, is het wel handig omdat main dan kan kiezen welke interface geladen moet worden.

Om je een beetje op weg te helpen met het omzetten van je voorbeeldcode in de eerste post naar een webapp-equivalent:
import cherrypy

class MyWindow(object):

    def index(self):
        return "<title>Hello World</title><a href='on_button_clicked'>Click here</a>"
    index.exposed = True

    def on_button_clicked(self):
        print 8 #en dan via de logic module dus
    on_button_clicked.exposed = True

cherrypy.quickstart(MyWindow())
Zodra de code gestart is draait een webserver op http://localhost:8080/

Het idee van CGI is min of meer dat je gewoon een CLI-app hebt, die gestart wordt door de webserver, en de output (stdout) van die app wordt naar de client gestuurd. Dat betekent meestal dat je HTML output moet leveren vanuit je programma, voorafgegaan door HTTP headers...

De webserver levert de door de client gestuurde HTTP(-headers) als input aan het script.

Hoe dit in python verder gaat heb ik geen ervaring mee, mogelijk zijn er libraries voor...
Er zijn verschillende libraries voor, sommige met een heleboel functies, andere die alleen het meest noodzakelijke bieden. Django biedt bijv. een compleet MVC framework aan, maar dat is in dit geval denk ik wat teveel van het goede. Bijv. CherryPy (voorbeeld hierboven) is hier een goed wat minder complex alternatief. De met python meegeleverde cgi module werkt vast ook, maar die biedt geen ingebouwde (test)webserver aan. Het Tornado framwork bevalt mij persoonlijk ook goed, maar dat draait alleen onder Linux.
« Laatst bewerkt op: 2011/10/21, 13:31:58 door commandoline »

Re: [Py] GUI en code scheiden (met oog op het web)
« Reactie #5 Gepost op: 2011/10/22, 15:03:54 »
Aha, dankje.

Maar ik denk dat het toch vrij moeilijk zal zijn om die gescheiden structuur vol te houden.
Als ik naar die CGI kijk, lijkt het alsof HTML gewoon kras met de code gemengd is.

En die frameworks, pfoew :p Ziet er niet gemakkelijk uit! Ik ga de boel nog eens goed moeten bekijken.
Ik begin er over te twijfelen of het niet beter is om de code in 3 te scheiden: 1 main, 1 gui en 1 logic. En de code dan starten met main.

Iemand ideeën over dit? Ik ben maar een python-noob  XD
Even terug naar je beginpost. Je maakt een soort code generator programma. Als dat programma meerdere programma's kan uitspuwen (een webapp, een gtk app, een ... app) dan heb je main niet nodig. Als je ze allemaal in één programma wilt combineren, is het wel handig omdat main dan kan kiezen welke interface geladen moet worden.

Om je een beetje op weg te helpen met het omzetten van je voorbeeldcode in de eerste post naar een webapp-equivalent:

Dankje commandoline!

Zoiets had ik inderdaad nodig!
Ik ga inderdaad geen main.py maken, daar het inderdaad de bedoeling is dat het programma meerdere apps kan genereren.

Opgelost!