【Python/Tkinter】新た(?)なGUIデザイナー「Gluonix Designer」
Tkinter を視覚的に

未だ説明書が満足に存在しませんが、
なおこの動画に依れば、「グロウニクス」あるいは「グローニクス」と発音しているように聞こえました。
現時点(V2.6)では瑕瑾も散見されるものの、なかなか面白いと感じました。日本語の情報は見つけられなかったので、本記事に簡単な感想を雑録しておきます。
導入
pipコマンドによってもインストールできます。私からは後者のpipを推奨します。
pip install GluonixDesigner
pipコマンドでインストールすれば、GluonixコマンドとGluonixDesignerコマンドが使えるようになります。これで
PS C:\⋯> Gluonix.exe
PS C:\⋯> GluonixDesigner.exe
python C:\⋯\Gluonix-Designer-main\Designer\Designer.py
Gluonixコマンドの方が楽ではないでしょうか。
簡単な使い方
初めに忌憚ない所感を述べますと、一画面では使いづらいです。二画面での使用を推奨します。なんとなれば、一画面ではこのようになるからです。

ウィンドウの大きさが固定されていて画面が隠される
名称が分からないので、勝手にトップ画面とでも呼称しましょうか。トップ画面の大きさが固定されており、
新規プロジェクト作成

トップ画面から「
Projectsというフォルダーを作り、そこにまとめています。

※save_testというフォルダーを更に作っておいた
| 項目 | 内容 |
|---|---|
Name |
dummy1 |
Location |
C:/⋯/Projects/save_test |
| パス | C:/⋯/Projects/save_test/dummy1 |

設定は後から幾らでも変更できますので、本記事では特に説明致しません。
保存方法:Save する場合
PS C:\⋯\Projects> ls .\save_test\
Directory: C:\⋯\Projects\save_test
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2025/04/24(木) 22:21 Data
-a--- 2025/04/24(木) 22:21 6 dummy1.ng
結局はC:/⋯/Projects/save_test)を選択します。
PS C:\⋯\Projects> ls .\save_test\
Directory: C:\⋯\Projects\save_test
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2025/04/24(木) 22:27 Data
d---- 2025/04/24(木) 22:27 Nucleon
-a--- 2025/04/24(木) 22:27 6 dummy1.ng
-a--- 2025/04/24(木) 22:27 1881 dummy1.py
アプリケーションの実行には、dummy1.pyを使います。
python dummy1.py
保存方法:Deploy する場合
端から
なお、
画面を構成する:Design

同時に、プレビュー画面(と呼称することにする)が現れます。まだ真更なので、何もありません。

ウィジェット画面で


ここで、
| 設定項目 | 内容 | 概説 |
|---|---|---|
Radius |
5 |
角の丸み |
Alignment |
Percentage |
数値の単位をピクセルから%に変更 |


角が丸みを帯び、
同様にして画面に要素を加えていきます。試しに、

なお、位置の移動と大きさの変更はマウスでも行うことができます。移動は左クリック、伸縮は右クリックに割り当てられています。

デザイン等は適当に値を変えただけなので載せません。
編輯を終えたら、
プログラムを記述する
画面だけあってもプログラムが無ければ、それは絵画のようなものに過ぎません。アプリケーションにするには、プログラムで機能を付与する必要があります。
ここでは単純に、このような機能を与えます。
dummy1.py
手つかずの状態では、このような内容になっています。
# -------------------------------------------------------------------------------------------------------------------------------
# Gluonix Runtime
# -------------------------------------------------------------------------------------------------------------------------------
#################################################################################################################################
if __name__=='__main__':
from Nucleon.Runner import * ###!REQUIRED ------- Any Script Before This Won't Effect GUI Elements
#################################################################################################################################
#################################################################################################################################
# -------------------------------------------------------------------------------------------------------------------------------
# Developer Programming Start
# -------------------------------------------------------------------------------------------------------------------------------
# Your Code Here
# -------------------------------------------------------------------------------------------------------------------------------
# Developer Programming End
# -------------------------------------------------------------------------------------------------------------------------------
#################################################################################################################################
#################################################################################################################################
Root.Start() ###!REQUIRED ------- Any Script After This Will Not Execute
#################################################################################################################################
先述の機能を実装すると、次のようになります。
# -------------------------------------------------------------------------------------------------------------------------------
# Gluonix Runtime
# -------------------------------------------------------------------------------------------------------------------------------
#################################################################################################################################
if __name__=='__main__':
from Nucleon.Runner import * ###!REQUIRED ------- Any Script Before This Won't Effect GUI Elements
#################################################################################################################################
#################################################################################################################################
# -------------------------------------------------------------------------------------------------------------------------------
# Developer Programming Start
# -------------------------------------------------------------------------------------------------------------------------------
# Your Code Here
Root.Canvas1.Button1.Bind(On_Click = lambda E: ChangeLabel())
def ChangeLabel():
Root.Canvas1.Label1.Set('Gluonix')
# -------------------------------------------------------------------------------------------------------------------------------
# Developer Programming End
# -------------------------------------------------------------------------------------------------------------------------------
#################################################################################################################################
#################################################################################################################################
Root.Start() ###!REQUIRED ------- Any Script After This Will Not Execute
#################################################################################################################################
考えてみれば当たり前の事ですが、Root.Canvas1.Button1のように、Canvas1も記述しなければなりません。Root.Button1ではエラーになります。
若しもRoot.Button1とします。即ち、実際の構造と同じく記述しなければなりません。
プログラムについて
プログラムの書き方はチュートリアルを参考にしています。
Button.Bind()の定義はこのように存在します。
Label.Set()の定義も同様です。
その他、チュートリアルに存在しない関数もこれらを参考に調べることができます。
from Nucleon.Runner import *
def main():
Root.Canvas1.Button1.Bind(On_Click = lambda E: ChangeLabel())
Root.Start()
def ChangeLabel():
Root.Canvas1.Label1.Set('Gluonix')
if __name__=='__main__':
main()
実行結果

跋
当初は「Nucleonが整理されており、使い勝手は特に悪く感じられませんでした。
素の
Discussion