Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用IronPython:wx.NET开发跨平台GUI以获得真正的本地外观?_.net_Mono_Wxpython_Ironpython_Wxwidgets - Fatal编程技术网

使用IronPython:wx.NET开发跨平台GUI以获得真正的本地外观?

使用IronPython:wx.NET开发跨平台GUI以获得真正的本地外观?,.net,mono,wxpython,ironpython,wxwidgets,.net,Mono,Wxpython,Ironpython,Wxwidgets,显然,使用IronPython,可以通过为每个平台编写不同的GUI层(Linux上的GTK,Windows上的WinForms…)来创建一流的用户体验 我正在认真考虑这样做,尽管我脑子里的小计算机科学家在尖叫。避免这种重复的一个选择是使用wxWidgets工具包,它能够在多个平台上提供真正的本地外观。由于我计划使用IronPython,我想这将涉及到wx.NET包装器的使用 我的问题是:在IronPython中是否可以使用wx.NET包装器?更重要的是:在IronPython中使用wx.NET容

显然,使用IronPython,可以通过为每个平台编写不同的GUI层(Linux上的GTK,Windows上的WinForms…)来创建一流的用户体验

我正在认真考虑这样做,尽管我脑子里的小计算机科学家在尖叫。避免这种重复的一个选择是使用wxWidgets工具包,它能够在多个平台上提供真正的本地外观。由于我计划使用IronPython,我想这将涉及到wx.NET包装器的使用

我的问题是:在IronPython中是否可以使用wx.NET包装器?更重要的是:在IronPython中使用wx.NET容易吗?我四处搜索,没有发现太多证据表明有人在其他地方使用这种组合。有没有人将这两种技术结合使用,或者听说过这样的项目


谢谢

我花了一些时间研究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()
您好_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>

wxDEFAULT_FRAME_STYLE | wxTAB_遍历
500,300
演示
1.
WX垂直
0
wxALL
5.
我的超级程序
-1
0
wxALL
5.
0
0
wxALL
5.
按我!
0