【问题标题】:Can a python callback call a .NET method?python回调可以调用.NET方法吗?
【发布时间】:2014-04-21 17:26:02
【问题描述】:

我有一个运行 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 操作系统中启动 python 进程,而不是通过 mono/C# 项目。除了这个虚拟键盘,我不需要wicd 和我的单声道项目之间的“交流”。

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

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 回调到单声道通信?
  • 有没有办法将回调注入 python FROM mono?
  • 我是否需要在 python 中重写基于 GtkSharp 的键盘,让 Debian OS 原生处理所有内容?
  • 是否还有其他虚拟键盘可以处理如此小的屏幕空间?
  • 有没有其他我没有想到的解决方案?

【问题讨论】:

    标签: c# python mono pygtk gtk#


    【解决方案1】:

    嗯。这些系统集成问题从来都不容易解决。这里有一些我会看的东西。

    在启动键盘时。弄清楚如何在终端中使用一行。一旦你有了它,你就可以弄清楚控制流。

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

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

    祝你好运!

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        您可以使用键盘创建一个独立的 GtkSharp 应用程序,打印到标准输出并使用 subprocess.check_output 从 python 运行它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-15
          • 2016-06-13
          相关资源
          最近更新 更多