1

これは 2 つの部分からなる質問です。ばかげた技術的な質問と、私が慣れていない言語でいくつかのことを行うことを学ぶためのおそらく間違ったアプローチについてのより広範な質問。

スキルを向上させるためだけに、オープンソースアプリでやろうと思っているいくつかの作業のために、いくつかのPython GUIライブラリ(主にwxPythonとIronPython)をいじっています。

日中、私はかなり標準的な C# ボディであり、かなり通常の MS ベースのツール セットを使用しており、新しい視点を得るために Python に注目しています。したがって、Ironpython Studio を使用することは、おそらく少しごまかしています (よし、たくさん)。Visual Studio プロジェクトなどのように見せようとしても、これは問題ではないように思われます。実装するには愚かすぎると思われる単純な動作が 1 つあります。

IE フォームを個別のコード ファイルに保持するにはどうすればよいでしょうか。たとえば、これまでの C# モンキーのように、フォームを相互に呼び出すにはどうすればよいでしょうか。メインフォームに呼び出されるフォームをインポートしようとしましたが、フォームをオブジェクト以外のものとして認識できないようです。新しいフォームは、独自のコード ファイル内のフォーム オブジェクトのように見えます。clr をインポートしています。フォームの「Show」メソッドを呼び出そうとしています。これは正しくありませんか?

私はこれを回避する方法をいくつか試しましたが(私の考えではありそうにありません)、問題は扱いにくいようです。これは私が見ていないだけのものですか、それとも実際には、GUI スクリプトについての考え方を Python に合わせて変更する方が適切でしょうか? Visual Studio シェルのセキュリティから Python を見ようとするのではなく、

4

2 に答える 2

1

私は問題について完全に明確ではありません。確かSystem.Windows.Forms.Formに、1 つのモジュールで 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 のフォーム デザイナー/コード ジェネレーターでは、コードをそのように構造化できないということですか? (私はそれを使用したことはありません。)

于 2008-12-12T14:15:31.510 に答える
0

結局、それはさらに単純でした。

このようにサブフォームを呼び出そうとしていました:

f = frmSubform()
f.Show()

しかし、私は実際にそれをこのようにする必要がありました

f = frmSubform()
Form.Show(f)

Form.ShowDialog(f)も機能しました。もちろん、ダイアログ形式で。

十分に単純なエラーですが、あなたがあなたを知るまでは、まあ、わかりません。

何がうまくいくのか、この段階で何がうまくいくのかを100%理解しているわけではありませんが、経験を積んで学ぶことは間違いありません。

于 2008-12-12T17:12:34.477 に答える