はじめに
今日のToDoリストを見て、今日は仕事がないことに気付きました。 インターネットに座って何日も続けてニュースを読むことも楽しみです。 何かをする必要がありました。つまり、ある種のアプリケーションを書くことでした。 来週末、Ruby + Qtの束を紹介したかったのですが、まだQtバインディングをインストールしていないため、代替品を探す必要がありました。 そして、私は彼女を見つけました。 なぜなら TkはRubyで提供されており、それが私の選択でした。
患者を知る
実際、それは私のことではなく、 Tkのことです。
Tk (英語版。 ツールキット -「ツールセット」、「ツールキット」から)は、オープンソースソースで配布されるグラフィカルインターフェイスの基本要素のクロスプラットフォームライブラリです。
医者はすでにここにいます
Ruby (英語版。Ruby- "Ruby")-高速で便利なオブジェクト指向プログラミングのための動的で反射的な解釈された高レベルプログラミング言語。 この言語には、オペレーティングシステムに依存しないマルチスレッドの実装、厳密な動的型付け、ガベージコレクター、およびその他の多くの機能があります。 一般的に、今必要なもの。
指に注意
つまり、Hello Worldと記述します。 彼なしではどこにいるの?
そのコードは次のようになります。
require 'tk' app = TkRoot.new { title "Hello Tk!"; padx 50; pady 15 } TkLabel.new(app) { text "Hello, World!" pack { padx 100; pady 100; side "left" } } Tk.mainloop
デブリーフィング
次に、何が何であるかを詳しく見てみましょう。
まず、ライブラリをインポートして操作します。
require 'tk'
次に、 Hello Tk!というタイトルの新しいウィンドウを作成しました。 高さ50ピクセル、幅15ピクセル:
app = TkRoot.new { title "Hello Tk!"; padx 50; pady 15 }
次に、「 Hello World!」というテキストを含む碑文を作成しました。 座標100x100の場合:
TkLabel.new(app) { text "Hello, World!" pack { padx 100; pady 100; side "left" } }
ここで、なじみのないパックに会いました。 これは何?
packは、親ウィンドウにアイテム(この場合はLabelウィジェット)を配置するパッカーです。 さらに2つのパッカーがあります。
- グリッドにウィジェットを配置するグリッド。 このパッカーは、たとえば電卓用のテーブルまたはボタンをコンパイルするのに役立ちます。
- placeを使用すると、指定された座標にウィジェットを配置でき、寸法は当社が指定します。
そして、私は完全に忘れていました、それが我々が得たものです。 どうしたの?

イベント
次に、イベントのトラップのトピックに触れたいと思います。 ボタンクリックか、ウィジェットのカーソルか。 Tkにはいくつかの典型的なタイプのイベント、つまり8つのイベントがあります! ここにあります:
- 「 1 」または「 ButtonPress-1 」は、ウィジェットが左クリックされたことを示します。
- カーソルがウィジェット上にあるときに「 Enter 」;
- 「 Leave 」-カーソルがウィジェットから削除されました(「 Enter 」の後にのみ機能します。
- 「 ダブル-1 」-ダブルクリックが行われました。
- 「 B3-Motion 」-マウスの右ボタンを押すとカーソルが移動します。
- " Control-ButtonPress-3 " -Ctrlとともにマウスの右ボタンが押されました。
- 「 Alt-ButtonPress-1 」 -Altとともに左クリックが実行されました。
イベントそのものではなく、イベントの種類を正確に翻訳しました。 つまり、「 ButtonPress-1 」イベント(左クリック)と「 ButtonRelease-1 」(マウスの左ボタンを放す )の両方を使用できるということです。 また、2つのマウスボタン(左と右)を使用できることに注意してください。 たとえば、「 ButtonPress-1 」(左)と「 ButtonPress-2 」(右)です。
実際、ここで傍受できるイベントはすべてあります。
次のようなイベントをキャッチできます。
wdgt.bind('ButtonPress-1') { puts "LBM: I was pressed..." }
または:
wdgt.bind('Control-ButtonPress-3', proc { puts "RBM + Ctrl: We was clicked..." })
また、ウィジェットの発表内でも。 このように:
wdgt = TkButton.new(app) { text "Click me!" command proc { puts "Button of nowhere: I was clicked..." } }
実際に知識を修正し、そのようなプログラムをここに書いてみましょう。
require 'tk' app = TkRoot.new { title "Hello Tk!"; padx 50; pady 15 } but = TkButton.new(app) { text "Hello, World!" pack { padx 100; pady 100; side "left" } } but.bind("Enter", proc { but.text "Welcome!" }) but.bind("Leave", proc { but.text "Bye!" }) Tk.mainloop
あなたが始めたとき、私たちは自分のために新しいものを見つけることはありません。

カーソルをボタンに移動するまで。 取得する必要があるものは次のとおりです。

次に、カーソルを移動して、ボタンが別れを告げていることを確認します。

メニューください
ここで、イベントのトラップに関する知識を統合し、新しいメニューウィジェットに慣れることを提案します 。 このアプリケーションの目的は、メニューでお気に入りのプログラミング言語を選択する必要があることです。 次に、ネストされたコメントを含むコードを提供します。 コードを理解しても問題は生じないと思います。 だからここにある:
require 'tk' # app = TkRoot.new { # title "Hello Tk!"; padx 50; pady 15 # } lbl = TkLabel.new(app) { # text "Something wasn't clicked yet..." # pack { padx 100; pady 100; side "left" } # } java_clicked = Proc.new { # "Java" lbl.text "Java was liked..." } cs_clicked = Proc.new { # "C#" lbl.text "C# was liked..." } cpp_clicked = Proc.new { # "C++" lbl.text "C++ was liked..." } py_clicked = Proc.new { # "Python" lbl.text "Python was liked..." } rb_clicked = Proc.new { # "Ruby" lbl.text "Ruby was liked..." } menu = TkMenu.new(app) # menu.add('command', 'label' => "Java", 'command' => java_clicked) # "Java" menu.add('command', 'label' => "C#", 'command' => cs_clicked) # "C#" menu.add('separator') # menu.add('command', 'label' => "C++", 'command' => cpp_clicked) # "C++" menu.add('separator') # menu.add('command', 'label' => "Python", 'command' => py_clicked) # "Python" menu.add('command', 'label' => "Ruby", 'command' => rb_clicked) # "Ruby" bar = TkMenu.new # bar.add('cascade', 'menu' => menu, 'label' => "Click me, I want you!") # app.menu(bar) # Tk.mainloop # , ?
確かに、私たちのプログラムを立ち上げる時です。 実際、ここに:

メニューを開き、「Java」をクリックします。 以下が表示されます。

おわりに
今日は以上です。 このトピックの目的は、Tkグラフィックライブラリを紹介することでした。これは、私の意見では、たとえ表面的に少しでも成功しました。
PS来週末、私たちはTkのウィジェットの典型的で特定のプロパティの調査を掘り下げ、Tkにあるウィジェットを調べ、30分で書いたJabberクライアントを書くことで知識を統合します。
じゃあね!
使用した材料:
ルビー-ウィキペディア
Tk-ウィキペディア
Ruby / TKガイド
また、彼のTkinterの紹介について、habradrug t3ns0rに深く感謝したいと思います 。