2011-01-07 11 views
1

、IronPythonのと、それはプラットフォームごとに異なるGUI層を書き込むことによって、第一級のユーザーエクスペリエンスを作成することが可能です(Linux上のGTK#、Windows上のWinForms ...)IronPythonを使用したクロスプラットフォームGUIの開発:真のネイティブなルックアンドフィールのためのwx.NET?明らかに

私は真剣にこれをやって検討しています、私の頭の中の小さなコンピュータ科学者が叫んでいます。この重複を避けるための1つのオプションは、複数のプラットフォームで真にネイティブなルックアンドフィールを提供できるwxWidgetsツールキットを使用することです。 IronPythonの使用を計画しているので、これにはwx.NETラッパーの使用が関係していると思います。

私の質問はこれです:IronPythonでwx.NETラッパーを使用することは可能ですか?もっと重要なのは、IronPythonでwx.NETを使うのは簡単ですか?私は周りを探索し、他の場所でこの組み合わせを使用している人々の証拠はほとんど見つけられていません。誰もがこの2つの技術を一緒に使ったのですか?

ありがとうございます!

答えて

3

IronPythonとwx.NETライブラリで遊んでいましたが、IronPythonのwx.NETを使用することが可能です。私は、基本的なアイデア(LinuxでMono 2.8.1とIronPython 2.6.1でテスト済み)を示す小さなサンプルアプリケーションを作成しました。 XRCファイルはwxFormBuilderを使用して作成されました。 IronPythonを使用してwx.NET GUIを作成するのはかなり簡単なはずです。同等のC#コードと同じように見えます。

hello_frame.pyw:

import clr 
clr.AddReference("wx.NET.dll") 
from wx import * 

class MyFrame1(Frame): 
    def __init__(self): 
     XmlResource.Get().LoadFrame(self, None, "MyFrame1") 
     self.EVT_BUTTON(XmlResource.XRCID("m_button1"), EventListener(self.OnMyButtonClicked)) 
    def OnMyButtonClicked(self, sender, e): 
     MessageDialog.ShowModal(self, "HELLO WORLD!", "", WindowStyles.DIALOG_OK | WindowStyles.ICON_INFORMATION) 
class HelloWorldDemo(App): 
    def OnInit(self): 
     XmlResource.Get().InitAllHandlers() 
     XmlResource.Get().Load("hello_frame.xrc") 
     f = MyFrame1() 
     f.Show() 
     return True 
def main(): 
    app = HelloWorldDemo() 
    app.Run() 
if __name__ == '__main__': 
    main() 

hello_frame.xrc:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<resource xmlns="http://www.wxwindows.org/wxxrc" version="2.3.0.1"> 
    <object class="wxFrame" name="MyFrame1"> 
     <style>wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL</style> 
     <size>500,300</size> 
     <title>Demo</title> 
     <centered>1</centered> 
     <object class="wxBoxSizer"> 
      <orient>wxVERTICAL</orient> 
      <object class="sizeritem"> 
       <option>0</option> 
       <flag>wxALL</flag> 
       <border>5</border> 
       <object class="wxStaticText" name="m_staticText1"> 
        <label>My Super Program</label> 
        <wrap>-1</wrap> 
       </object> 
      </object> 
      <object class="sizeritem"> 
       <option>0</option> 
       <flag>wxALL</flag> 
       <border>5</border> 
       <object class="wxTextCtrl" name="m_textCtrl1"> 
        <value></value> 
        <maxlength>0</maxlength> 
       </object> 
      </object> 
      <object class="sizeritem"> 
       <option>0</option> 
       <flag>wxALL</flag> 
       <border>5</border> 
       <object class="wxButton" name="m_button1"> 
        <label>Press Me!</label> 
        <default>0</default> 
       </object> 
      </object> 
     </object> 
    </object> 
</resource> 
関連する問題