2010-03-04 34 views
10

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 STDINSTDOUT. 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ó.

+1

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

+0

đừ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! –

Trả lời

7

Tôi đang tìm kiếm một điều tương tự và tôi phát hiện ra rằng dự án IronLab có giao diện điều khiển IronPython đẹp mắt. Bạn có thể tìm thấy mã nguồn tại đây https://github.com/rwg0/ironlab/tree/master/IronPythonConsole.

[chỉnh sửa ngày 25/10/2016] url cố định bị hỏng

+0

phải, tôi thực sự chuyển đến này khoảng một năm trước đây, nhưng quên để cập nhật câu hỏi của tôi. cảm ơn vì đã ghi lại nó cho phần còn lại của thế giới. IronPythonConsole từ dự án IronLab là một viên ngọc! Bạn có thể xem một ví dụ về nhúng nó vào dự án của riêng bạn trong dự án RevitPythonShell. –

+0

Liên kết này đã chết, thật không may. – canton7

+0

Đã thay đổi url. – Samuel

3

Ok, sau đó tôi có hai câu trả lời có thể. Một trong những nhận xét trên .... và khác xa đơn giản (không IntelliSense, không nổi bật cú pháp):

http://www.codeproject.com/KB/edit/irontextbox2.aspx

Đó là bởi JoeSox, và nó là dành cho IronPython 2, chứ không phải 2.6. Tuy nhiên tôi đã có thể cập nhật nó để hoạt động đúng với 2,6 trong khoảng năm phút. Nếu bạn quan tâm tôi có thể tìm ra cách để gửi cho bạn một tệp khác hoặc tát dự án được cập nhật ở đâu đó (nó được xuất bản theo giấy phép MIT).

Tận hưởng!

David

+0

ngọt ngào :) chỉ là những gì tôi đang tìm kiếm! Sẽ báo cáo lại ở đây khi tôi chạy nó! –

+0

bạn có thể xem mã nguồn của RevitPythonShell (http: //revitpythonshell.googlecode.com) cho một ý tưởng về làm thế nào để tích hợp này kiểm soát IronTextBox2 ... –

Các vấn đề liên quan