Tôi đã thử đường dẫn rõ ràng trong dự án nguồn mở thú cưng của tôi RevitPythonShell (một plugin cho phần mềm xây dựng mô hình Autodesk Revit Architecture 2010): code.interact()
với công cụ IronPython được thiết lập để sử dụng các luồng .NET cho STDIN
và STDOUT
. Sau đó, tôi chuyển hướng đến điều khiển TextBox
. Nó hoạt động, nhưng thực sự chỉ là một hack xấu xí.Làm thế nào để nhúng một IronPython tương tác đồ họa trong một ứng dụng?
Vấn đề chính là bắt tất cả nội dung hoạt động: Mũi tên lên và mũi tên xuống cho lịch sử, chỉnh sửa, sao chép & dán, EOF, đánh dấu cú pháp, mẹo công cụ, v.v. Cần nhiều công việc để có được quyền này, và nó không thực sự là vấn đề tôi đang cố gắng giải quyết (Tôi đang cố gắng để có được một vỏ tương tác được lưu trữ trong Revit, không làm cho giao diện shell hoàn hảo).
Nếu đây không phải là dự án .NET, tôi có thể xem xét việc sử dụng lại PyCrust/PyWrap, nhưng tôi không chắc liệu điều đó có thể được thực hiện từ dự án WinForms hay không. Có điều gì tương tự cho .NET không?
Có ai từng triển khai giao diện IConsole
và có thể hiển thị ví dụ về những gì tôi cần làm không? Có vẻ như đây sẽ là con đường thích hợp để đi (ngược lại với việc sử dụng mô-đun code
), nhưng đối với cuộc sống của tôi, tôi không thể hình dung ra được. Mã nguồn IronPython không có ý kiến gì cả.
CẬP NHẬT: Sau khi thử một số nội dung, cuối cùng tôi đã giải quyết trên mã số IronLab tuyệt vời. Nó bao gồm một shell ví dụ với tô sáng cú pháp và tất cả. Các mã đã được tốt đẹp và dễ dàng để tích hợp. Kiểm tra mã RevitPythonShell về các gợi ý về cách nhúng nó.
Không thực sự là giải pháp đóng hộp đẹp ... vì vậy tôi sẽ để nó làm nhận xét. Bạn có thể xem nguồn PythonConsole.cs của Matt Ward trong dự án SharpDevelop IDE. Tìm trong SharpDevelop \ src \ AddIns \ BackendBindings \ Python \ PythonBinding \ Project \ Src. Nó có thể là một vấn đề lớn để phá vỡ lớp này để nó (và ICSharpCode.TextEditor) có thể được sử dụng trong các dự án khác. Nhưng có lẽ nó sẽ giúp bạn một chút. Tải xuống nguồn SharpDevelop từ máy chủ xây dựng của chúng: http://build.sharpdevelop.net/BuildArtefacts hoặc sử dụng svn tại: svn: //svnmirror.sharpdevelop.net/sharpdevelop/branches/3.0/SharpDevelop – djlawler
đừng ngại;) đây là một câu trả lời rất hay theo đúng nghĩa của nó - tôi sẽ có một cái nhìn vào nó ngay sau khi tôi có được xung quanh để làm như vậy! –