気ままにやっていくプログラミングとかブログ

中学1年生が気ままにプログラムのことを中心に書いていくブログです。

RustのGTKでGladeを試してみる

こんにちは。

Kitachisukuです。

RustのGTKでGladeを試してみました。

 


 1.方法


 

 1.方法

gtk::Builderを使います。

ちなみにコードは現在作成中のプログラムから引っ張ってきてます。

(そのため作成中のコードです。)

 

環境(Windows 64bit {MSYS2} GTK3.0 Glade 3.38.2)

 

ui.glade

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
  <requires lib="gtk+" version="3.24"/>
  <object class="GtkWindow" id="win">
    <property name="can-focus">False</property>
    <property name="title" translatable="yes">Easy Base 64 - by kitachisuku</property>
    <property name="window-position">center</property>
    <property name="default-width">1000</property>
    <property name="default-height">700</property>
    <child>
      <object class="GtkBox" id="mainbox">
        <property name="visible">True</property>
        <property name="can-focus">False</property>
        <property name="spacing">10</property>
        <property name="homogeneous">True</property>
        <child>
          <object class="GtkBox" id="leftbox">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="orientation">vertical</property>
            <property name="spacing">30</property>
            <child>
              <object class="GtkEntry" id="imagefile">
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="placeholder-text" translatable="yes">画像ファイル名(フルパスで!)</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="changeBase64">
                <property name="label" translatable="yes">画像をBase64データに変換</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="changeBase64HTML">
                <property name="label" translatable="yes">画像をimgタグ(HTML)に変換</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="changeBase64HTML1">
                <property name="label" translatable="yes">画像をリンク + imgタグ(HTML)に変換</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">3</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkBox" id="rightbox">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="orientation">vertical</property>
            <property name="spacing">10</property>
            <child>
              <object class="GtkEntry">
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="vexpand">False</property>
                <property name="editable">False</property>
                <property name="placeholder-text" translatable="yes">結果(Base64変換後)</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

 

画像

f:id:Kitachisuku:20210118191813j:plain

 

main.rs

extern crate gtk;
extern crate gio;

use gtk::prelude::*;

fn main()
{
    if gtk::init().is_err(){
        println!("GTKの起動に失敗しました。");
        return;
    }

    //  UIファイル読み込み
    let uifile = include_str!("ui.glade");

    //  ビルダー作成
    let builder = gtk::Builder::from_string(uifile);

    let window: gtk::Window = builder.get_object("win").unwrap();

    window.show_all();

    gtk::main();
}

 

ディレクトリ構造

f:id:Kitachisuku:20210118192004j:plain

 

実行結果

f:id:Kitachisuku:20210118192141j:plain

 

ちなみにこれに使っている作成中のアプリは近いうちに出します。

 

では。