python回调可以调用.NET方法

本文关键字:NET 方法 调用 回调 python | 更新日期: 2023-09-27 17:59:24

我有一个运行Debian的BeagleBone Black,附带一个480x272像素的斗篷(触摸屏)。我将wicd用于有线/无线接口,因为它有一个非常好的基于python/gtk的解决方案,已经为最终用户轻松设置各种网络配置做好了准备。

问题是,最终用户将无法使用物理键盘,因此为了输入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文件中挂起一个gtkfocus事件,如下所示:

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操作系统原生地处理所有事情吗
  • 有没有其他虚拟键盘可以处理这么小的屏幕空间
  • 有没有其他我没有想到的解决方案

python回调可以调用.NET方法

嗯。这些系统集成问题从来都不容易解决。以下是我想看的一些东西。

当谈到启动键盘时。弄清楚如何在终端中使用线路。一旦你有了它,你就可以计算出控制流。

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

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

祝你好运!

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

如果你能为你的键盘提供一个C/C++接口,你就可以把它用作扩展模块,这可能比直接把它移植到Python要省力。

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

您可以使用键盘制作一个独立的GtkSharp应用程序,打印到stdout,并使用subprocess.check_output.