2

プロット グラフ アプリケーションをコーディングしようとしていますが、ユーザー入力 (マウス クリック) と描画領域/キャンバスが必要です。この 2 を見つけました: http://zetcode.com/gui/rubyqt/introduction/およびhttp://zetcode.com/gui/rubygtk/。どのプラットフォームで実行できるかは気にしません。プロジェクトはRuby上になります。助けや提案をありがとう!

4

2 に答える 2

2

QtRuby を試す - Qt の機能は最も包括的な IMO です。

座標を追跡する方法の例を次に示します。

require 'Qt4'
class MyWindow < Qt::Widget

    def initialize
        super
        move 300, 300
        setFixedSize(500, 500)
        @label = Qt::Label.new(self)
        @layout = Qt::VBoxLayout.new
        @graphics = Qt::GraphicsScene.new(-100, -100, 400, 200)
        @gv = Qt::GraphicsView.new(@graphics, self)
        @label.show
        @gv.show
        @layout.add_widget(@gv, 0, Qt::AlignCenter)
        @layout.add_widget(@label, 0, Qt::AlignCenter)
        setLayout(@layout)
        show
    end

    def mousePressEvent(e)
        @mousePos = e.pos
        @label.setText("x: #{@mousePos.x}, y: #{@mousePos.y}")
    end

end

Qt::Application.new(ARGV) do
    MyWindow.new
    exec
end

最適なスタイルではありませんが、一般的な理解には十分です。

手動で線を引きたい場合、Qt にはすでにそのような機能があります。また、Qt には美しいコミュニティとドキュメントがあります

于 2013-05-28T11:09:37.890 に答える
2

また、(tcl、python、perl などの他のいくつかの言語に加えて) Ruby のバインディングを持つ Tk を試すこともできます。概要と例を含むチュートリアルについては、tkdocs.comを参照してください。グラフのプロットについては、キャンバスウィジェットを参照してください。

キャンバス上にインタラクティブに線を描く方法を示すその Web サイトの例を次に示します。

require 'tk'
root = TkRoot.new()

@canvas = TkCanvas.new(root)
@canvas.grid :sticky => 'nwes', :column => 0, :row => 0
TkGrid.columnconfigure( root, 0, :weight => 1 )
TkGrid.rowconfigure( root, 0, :weight => 1 )

@canvas.bind( "1", proc{|x,y| @lastx = x; @lasty = y}, "%x %y")
@canvas.bind( "B1-Motion", proc{|x, y| addLine(x,y)}, "%x %y")

def addLine (x,y)
  TkcLine.new( @canvas, @lastx, @lasty, x, y )
  @lastx = x; @lasty = y; 
end

Tk.mainloop
于 2013-05-28T11:05:18.470 に答える