python回调可以调用.NET方法吗?

时间:2014-04-21 17:26:03

标签: c# python mono pygtk gtk#

我有一个运行Debian的BeagleBone Black,附有一个480x272像素的斗篷(触摸屏)。我使用wicd作为有线/无线接口,因为它已经为最终用户提供了非常好的python/gtk-based solution,可以轻松设置各种网络配置。

问题是最终用户无法访问物理键盘,因此为了进入wifi设置,他们需要一个虚拟键盘。

我的主要项目是基于单声道的(C#),我有一个用GtkSharp(C#)编写的虚拟键盘。我可以从我的其他C#项目文件中调用它,但不能从这个python模块打开它。

我通常使用以下代码调用wicd客户端

    private void CallWicdDialaog()
    {
        Process proc = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "/usr/bin/wicd-client",
                Arguments = "-n",
                UseShellExecute = false,
                RedirectStandardOutput = false,
                CreateNoWindow = true
            }
        };
        proc.Start();
    }

这将启动本机Debian OS中的python进程,而不是通过mono / C#项目。我不需要"沟通" wicd和我的单声道项目之间的其他任何地方,除了这个虚拟键盘。

wicd项目在其guiutil.py文件中挂起了一个gtk 焦点事件,如下所示:

class LabelEntry(gtk.HBox):
    """ A label on the left with a textbox on the right, 370 pixels wide. """
    def __init__(self,text):
        ...
        self.entry.connect('focus-in-event', self.show_characters)

    ...

    def show_characters(self, widget=None, event=None):
        # When the box has focus, show the characters
        """ I would like to hook my virtual keyboard in here """
        if self.auto_hide_text and widget:
            self.entry.set_visibility(True)

我想做的是在show_characters定义中调用我的虚拟键盘。

我该怎么做?

  • 有没有办法从这个python回调通信到mono?
  • 有没有办法将回调注入到python FROM mono?
  • 我是否需要在python中重写基于GtkSharp的键盘,让Debian OS本地处理所有内容?
  • 那里有另一个可以处理如此小屏幕空间的虚拟键盘吗?
  • 我还没想到有什么不同的解决方案吗?

3 个答案:

答案 0 :(得分:0)

嗯。这些系统集成问题永远不容易解决。以下是我要看的一些内容。

启动键盘时。弄清楚如何使用终端中的线路来完成它。一旦你有了,你就可以找出控制流程。

传输数据可能很有趣。首先想到的两件事是:

  1. 尝试设置C#键盘以返回可以通过stdout / in解析的文本。然后只需从python应用程序fork()到键盘。它适用于bash,为什么不呢?
  2. 在C#项目中编写一个小的udp服务器,让它将输出发送到python应用程序。在内部环回上完成所有操作,您不应该在开放端口上做广告。
  3. 在启动时运行,并同时监听系统中断以进行控制切换。
  4. 祝你好运!

答案 1 :(得分:0)

您可以将您的python代码移植到IronPython这应允许双向调用,但您可能必须为目标环境构建IronPython。

如果您可以为键盘提供C / C ++接口,则可以将其用作扩展模块,这可能比将其直接移植到Python上要少。

或者,您可以将键盘称为外部进程,并使用子进程内的管道。

答案 2 :(得分:0)

您可以使用键盘制作独立的GtkSharp应用程序,打印到stdout并使用subprocess.check_output从python运行它。