我想向 C# WinForms 应用程序添加“类似 IDLE 的功能”,但我不太清楚如何做到这一点,也找不到任何对 Google 有用的东西。
所以基本上我想要交互式命令行界面,用户可以在其中输入一些 Python 代码并执行它(不仅仅是表达式,应该可以定义新函数)。
那么,从哪里开始呢?有没有好的教程或示例可用?
我想向 C# WinForms 应用程序添加“类似 IDLE 的功能”,但我不太清楚如何做到这一点,也找不到任何对 Google 有用的东西。
所以基本上我想要交互式命令行界面,用户可以在其中输入一些 Python 代码并执行它(不仅仅是表达式,应该可以定义新函数)。
那么,从哪里开始呢?有没有好的教程或示例可用?
如果我没记错的话,Python in a Nutshell一书中有一章是关于嵌入 Python 的。也许你可以在那里找到一些有用的信息,但是由于这本书不是特定于 Windows 的,你可能需要自己修改它。
我会像这样设置我的 WinForm:添加 2 个文本框。
1:用于输出。将第一个的多行属性设置为true,并使其只读。
2:用于输入。使用 KeyUp 或 KeyPress 事件作为返回键并使用文本做你想做的事:添加命令到输出文本框,针对引擎启动代码并捕获解释器的输出
此链接(http://groups.google.com/group/ironpy/browse_thread/thread/5e61a944c7c94d4b/0cbf29ec0f5fbb64?pli=1)可能会给出一些关于针对 python 引擎启动命令的答案。
IronRuby 带有一个命令行解释器。IronPython 不是也有一个吗?如果是这样,源代码将是一个好的开始 :) 哦,如果不是,请务必查看 IronRuby 解释器,因为这两种语言都基于 DLR,因此非常相似,可以从两者中学习。
通过 IronPython 邮件列表,我找到了 IronTextBox2,这是一个很好的例子。它需要一些调整才能使其运行,但除此之外是很好的解决方案。
这是我最通用的解决方案:
Point cursorPoint;
int minutesIdle=0;
private bool isIdle(int minutes)
{
return minutesIdle >= minutes;
}
private void idleTimer_Tick(object sender, EventArgs e)
{
if (Cursor.Position != cursorPoint)
{
// The mouse moved since last check
minutesIdle = 0;
}
else
{
// Mouse still stoped
minutesIdle++;
}
// Save current position
cursorPoint = Cursor.Position;
}
您可以设置一个以 60000 间隔运行的计时器。通过这种方式,您将只知道用户不移动鼠标的分钟数。您还可以在 Tick 事件本身上调用“isIdle”来检查每个间隔。