Ironpython Studio формы

Это вопрос из двух частей. Тупой технический запрос и более широкий вопрос о моем, возможно, ошибочном подходе к обучению выполнению некоторых вещей на языке, на котором я новичок.

Я просто играю с несколькими библиотеками Python GUI (в основном, с wxPython и IronPython), чтобы поработать над приложением с открытым исходным кодом, просто чтобы улучшить свои навыки и так далее.

Днем я довольно стандартный c # bod, работающий с довольно нормальным набором инструментов на основе MS, и я смотрю на Python, чтобы дать мне новую перспективу. Таким образом, использование Ironpython Studio, вероятно, немного обманывает (хорошо, много). Кажется, это не имеет значения, потому что как бы сильно он не выглядел как проект Visual Studio и т. Д. Есть одно простое поведение, которое я, вероятно, слишком глуп для реализации.

IE Как мне сохранить мои формы в отдельных отдельных файлах кода, таких как обезьяна c #, которой я всегда был, и все же вызывать их друг от друга? Я попытался импортировать форму для вызова в основную форму, но я просто не могу заставить форму распознаваться как что-либо, кроме объекта. Новая форма выглядит как объект формы в своем собственном файле кода, я импортирую clr. Я пытаюсь вызвать метод «Показать» формы. Разве это не правильно?

Я попробовал несколько (на мой взгляд, более маловероятных) способов обойти это, но проблема кажется неразрешимой. Является ли это чем-то, чего я просто не вижу, или было бы для меня более уместным изменить то, как я думаю о своем сценарии GUI, чтобы он подходил для Python (в этом случае я могу переключиться обратно на wxPython, который казался более доступным из Pythonic точка зрения), а не пытаться взглянуть на Python с точки зрения безопасности оболочки Visual Studio?

12.12.2008 10:36:07
2 ОТВЕТА

Я не совсем ясно по этой проблеме. Вы, безусловно, можете определить подкласс System.Windows.Forms.Formв IronPython в одном модуле, а затем импортировать подкласс формы в другом модуле:

# 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)

Неужели конструктор форм / генератор кода IronPython Studio не позволит вам так структурировать свой код? (Я никогда не использовал это.)

1
12.12.2008 14:15:31
РЕШЕНИЕ

В конце концов, это было еще проще.

Я пытался вызвать подчиненную форму таким образом:

f = frmSubform ()
f.Show ()

Но мне действительно нужно было сделать это так

f = frmSubform ()
Form.Show (f)

Form.ShowDialog (f) работает также; в формате диалога конечно.

Достаточно простая ошибка, но пока вы не знаете, ну, не знаю.

Я не уверен на 100%, что я понимаю на данном этапе, почему то, что работает, работает, но я уверен, что я буду учиться с опытом.

0
12.12.2008 17:12:34