Nieuws:

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

Auteur Topic: [Python] Script uitbreiden  (gelezen 1307 keer)

[Python] Script uitbreiden
« Gepost op: 2011/05/14, 21:50:31 »
Hallo,

Even een omkadering, ik ben een beetje aan het prutsen in Illumination Software Creator, een programma waarmee je simpel programmatjes "tekent" door het verbinden van verschillende events met elkaar.

Nu, je kan ook zelf uitbreidingen schrijven aan de hand van een soort pluginsysteem. Als je zelf een plugin schrijft, wordt dat zo in de code gecompiled dat het er goed inpast. Maar ik zou nu bestaande functionaliteit, die automatisch in het script zit, willen aanpassen.

Even een voorbeeld: dit is een scriptje dat illumination maakt als ik gewoon 1 window heb, met een knop, als ik op die knop klik, komt er een message box met "hello"

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gobject
import random
import os
import gtk
#EndImports

class iscApp1:
 iscWindow4Window1 = gtk.Window(gtk.WINDOW_TOPLEVEL)
 iscWindow4Window1Fixed = gtk.Fixed()
 iscWindow4Button2 = gtk.Button("Button")

 #EndOfGlobalVariables

 def main(self):
  gtk.main()

 def destroy(self, widget, data=None):
  gtk.main_quit()

#EndOfClass

def iscAppQuit2():
 thisiscApp1.destroy(None,None)
 #iscAppQuit2Done


def iscWindow4():
 thisiscApp1.iscWindow4Button2 = gtk.Button("Button")
 thisiscApp1.iscWindow4Window1 = gtk.Window(gtk.WINDOW_TOPLEVEL)
 thisiscApp1.iscWindow4Window1Fixed = gtk.Fixed()
 thisiscApp1.iscWindow4Window1.set_title("Window")
 thisiscApp1.iscWindow4Window1.set_default_size(300, 300)
 thisiscApp1.iscWindow4Window1.add(thisiscApp1.iscWindow4Window1Fixed)
 thisiscApp1.iscWindow4Window1Fixed.width = 300
 thisiscApp1.iscWindow4Window1Fixed.height = 300
 thisiscApp1.iscWindow4Window1.connect("delete_event", iscWindow4Closed)
 thisiscApp1.iscWindow4Window1Fixed.show()
 thisiscApp1.iscWindow4Window1Fixed.put(thisiscApp1.iscWindow4Button2, 97, 101)
 thisiscApp1.iscWindow4Button2.set_size_request(80, 26)
 thisiscApp1.iscWindow4Button2.connect("clicked", iscWindow4ButtonClicked)
 thisiscApp1.iscWindow4Button2.show()
 thisiscApp1.iscWindow4Window1.show()
 #iscWindow4Opened
 #iscWindow4Done


def iscWindow4Closed(self, other):
 pass
 iscAppQuit2()
 #iscWindow4Closed


def iscWindow4ButtonClicked(self):
 pass
 iscMessageBox5()
 #iscWindow4ButtonClicked


def iscMessageBox5():
 message = "Hello"
 dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_NONE, message)
 dialog.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)
 dialog.run()
 #iscMessageBox5Open
 dialog.destroy()
 #iscMessageBox5Closed

#EndOfFunctions

thisiscApp1 = iscApp1()

iscWindow4()
#iscApp1Launched
#EndOfStatements

thisiscApp1.main()

Echter zijn er volgens mij maar 2 dingen die ik moet kunnen aanpassen, namelijk deze:

class iscApp1:
 iscWindow4Window1 = gtk.Window(gtk.WINDOW_TOPLEVEL)
 iscWindow4Window1Fixed = gtk.Fixed()
 iscWindow4Button2 = gtk.Button("Button")

 #EndOfGlobalVariables

Nu weet ik niet, of ik nog een deeltje kan toevoegen aan deze code, door een stukje code op een andere plaats toe te voegen?

Concreter: In vb zou die "partial classes" noemen, daar gebruik ik dat regelmatig, bestaan partial classes in python?

En ook nog:

def iscWindow4():
 thisiscApp1.iscWindow4Button2 = gtk.Button("Button")
 thisiscApp1.iscWindow4Window1 = gtk.Window(gtk.WINDOW_TOPLEVEL)
 thisiscApp1.iscWindow4Window1Fixed = gtk.Fixed()
 thisiscApp1.iscWindow4Window1.set_title("Window")
 thisiscApp1.iscWindow4Window1.set_default_size(300, 300)
 thisiscApp1.iscWindow4Window1.add(thisiscApp1.iscWindow4Window1Fixed)
 thisiscApp1.iscWindow4Window1Fixed.width = 300
 thisiscApp1.iscWindow4Window1Fixed.height = 300
 thisiscApp1.iscWindow4Window1.connect("delete_event", iscWindow4Closed)
 thisiscApp1.iscWindow4Window1Fixed.show()
 thisiscApp1.iscWindow4Window1Fixed.put(thisiscApp1.iscWindow4Button2, 97, 101)
 thisiscApp1.iscWindow4Button2.set_size_request(80, 26)
 thisiscApp1.iscWindow4Button2.connect("clicked", iscWindow4ButtonClicked)
 thisiscApp1.iscWindow4Button2.show()
 thisiscApp1.iscWindow4Window1.show()
 #iscWindow4Opened
 #iscWindow4Done

Kan ik die define nog op een andere plek definiƫren?

Bijvoorbeeld iets als:

Extends def iscWindow4? beetje zelfde als partial class dus, maar partial def, ofzo.
Op deze manier zou ik zelf grafische elementen kunnen toevoegen, of allesinds bijvoorbeeld lettergroote ofzo op bestaande elementen aanpassen.

Hartelijk dank!

Re: [Python] Script uitbreiden
« Reactie #1 Gepost op: 2011/05/15, 01:00:04 »
Ik ken het programma niet, maar wat produceert dat voor ongelofelijk lelijke code!

Als ge een beetje wilt leren programmeren in Python/GTK, installeer dan Glade uit het Software Centrum. Hiermee kunt ge ook snel en gemakkelijk een grafische interface bouwen, en met wat tutorials op het internet is het ook niet moeilijk om deze met uw code aan te roepen. Ik kan ook wel helpen als ge deze weg kiest.
Dat zal in ieder geval veel betere code en meer kennis met zich meebrengen.

Offline MKe

  • Lid
Re: [Python] Script uitbreiden
« Reactie #2 Gepost op: 2011/05/15, 13:05:48 »
Er schijnt inderdaad een module te zijn voor partial classe:
http://pypi.python.org/pypi/partial/1.0
Die zit niet in de standaard distributie geloof ik (tenminste niet op Ubi 10.04). Ik weet niet of dit compatible is met 2.7 maar iig met 2.6. Ik heb ook geen idee of het met functies werkt, proberen dus.
En misschien staat hier nog wat voor je in?
http://docs.python.org/library/functools.html

Re: [Python] Script uitbreiden
« Reactie #3 Gepost op: 2011/05/15, 19:35:38 »
Hmh, bedankt voor de hulp, maar het is toch nog niet echt wat ik nodig heb/kan gebruiken.

En inderdaad Nunslaughter, het is mij ook opgevallen dat dit niet echt mooie code is. Maar Illumination heeft wel ene paar voordelen:
Het kan compilen naar iOS, Android, Mac, Linux, Windows, Maemo en binnenkort naar WP7, dus het is wel vrij crossplatform.


Ik heb al nagedacht om zelf iets in elkaar te boxen, maar ik zie echt geen goede manier om al die platforms te supporten. Ik dacht ook al aan virtualiseren, dus je runt je app op je GSM, maar eigenlijk streamt die het van een server, maar dan kan je geen lokale bewerkingen doen zoals files saven enzo, dus zit ik weer vast.

Als iemand hier een insteek op heeft, let me know please.

Edit: nevermind, we kunnen hier doorgaan: http://forum.ubuntu-nl.org/programmeren/%28idee%29-cloud-apps/
« Laatst bewerkt op: 2011/05/15, 20:04:21 door Carharttguy »