2008-12-12 47 views
1

Ceci est une question en deux parties. Une question technique stupide et une question plus large au sujet de mon approche peut-être défectueuse à apprendre à faire certaines choses dans une langue que je suis nouveau.Formes Ironpython Studio

Je ne fais que jouer avec quelques bibliothèques Python GUI (principalement wxPython et IronPython) pour un travail que je pense faire sur une application open source, juste pour améliorer mes compétences et ainsi de suite.

De jour, je suis un C# bod standard travaillant avec un ensemble assez normal d'outils basés sur MS et je regarde Python pour me donner une nouvelle perspective. Ainsi, en utilisant Ironpython Studio est probablement tricher un peu (d'accord, beaucoup). Cela ne semble pas important, car il tente de ressembler à un projet Visual Studio, etc. Il y a un comportement simple que je suis probablement trop bête pour implémenter.

I.E. Comment puis-je garder mes formulaires dans de jolis fichiers de code séparés, comme le singe C# que j'ai toujours été, et pourtant les invoquer les uns des autres? J'ai essayé d'importer le formulaire à appeler dans le formulaire principal, mais je n'arrive pas à obtenir que le formulaire soit reconnu autrement que comme un objet. Le nouveau formulaire semble être un objet de formulaire dans son propre fichier de code, j'importe le clr. J'essaie d'invoquer la méthode 'Show' d'un formulaire. Est-ce que ce n'est pas vrai?

J'ai essayé quelques-uns (dans mon esprit plus improbable) des moyens autour de cela, mais le problème semble insoluble. Est-ce quelque chose que je ne vois pas ou serait-il plus approprié pour moi de changer la façon dont je pense à mon script GUI pour l'adapter à Python (auquel cas je peux revenir à wxPython qui semblait plus accessible depuis un Pythonic point de vue) plutôt que d'essayer de regarder Python à partir de la sécurité du shell Visual Studio?

Répondre

0

En fin de compte, c'était encore plus simple.

je tentais d'invoquer la sous-formulaire ainsi:

f = frmSubform()
f.Show()

Mais je réellement besoin de le faire de cette façon

f = frmSubform ()
Form.Show (f)

Form.ShowDialog (f) a également fonctionné; dans un format Dialog bien sûr.

Une erreur assez simple mais jusqu'à ce que vous vous connaissiez, bien, ne sais pas.

Je ne suis pas sûr à 100% que je comprends à ce stade pourquoi ce qui fonctionne, fonctionne, mais je suis sûr que je vais apprendre avec l'expérience.

1

Je ne suis pas totalement clair sur le problème. Vous pouvez certainement définir une sous-classe de System.Windows.Forms.Form dans IronPython dans un module, puis importer la sous-classe de formulaire dans un autre module:

# in form.py 
from System.Windows.Forms import Form, Button, MessageBox 
class TrivialForm(Form): 
    def __init__(self): 
     button = Button(Parent=self, Text='Click!') 
     button.Click += self.show_message 

    def show_message(self, sender, args): 
     MessageBox.Show('Stop that!') 

# in main.py 
import clr 
clr.AddReference('System.Windows.Forms') 
from System.Windows.Forms import Application 
from form import TrivialForm 
if __name__ == '__main__': 
    f = TrivialForm() 
    Application.Run(f) 

Est-ce que le générateur concepteur/code sous forme de IronPython Studio structure ne vous laissez votre code comme ça? (Je ne l'ai jamais utilisé.)