mieki256's diary



2026/02/25(水) [n年前の日記]

#2 [nim] NiGuiを試用

Nim言語でGUIアプリを作成できるライブラリとして、NiGui というものがあるらしい。

wNim はWindows専用だったけど、この NiGui はクロスプラットフォーム対応 ―― Windows/Linux/Mac でも使えるのだとか。

_simonkrauter/NiGui: Cross-platform desktop GUI toolkit written in Nim

気になったので試用してみることにした。環境は Windows11 x64 25H2 + Nim 2.2.8 x64。

インストール :

nimble install nigui

使ってみた :

wNim は Nim のバージョンを 1.6.20、2.0.0、2.0.6、2.0.8 等に落とさないと使えなかったけれど、NiGui は Nim 2.2.8 でもあっさり使えてしまった。

サンプルは以下。

_hellonigui.nim
import nigui

app.init()
let win = newWindow("Hello NiGui")
win.width = 400.scaleToDpi
win.height = 300.scaleToDpi

win.iconPath = "example_01_basic_app.png"

let con = newLayoutContainer(Layout_Vertical)
win.add(con)

let lbl = newLabel("Hello NiGui.")
lbl.fontSize = 28
lbl.fontFamily = "Consolas"
lbl.width = 350
lbl.height = 100
con.add(lbl)

let btn = newButton("Button 1")
con.add(btn)

let exitBtn = newButton("Quit")
con.add(exitBtn)

btn.onClick = proc(event: ClickEvent) =
  win.alert("Hello. This is a simple message box.")

exitBtn.onClick = proc(event: ClickEvent) =
  app.quit()

win.show()
app.run()

コンパイルは以下。
nim c -d:release -d:strip --opt:size --app:gui hellonigui.nim

hellonigui.exe が生成された。実行もできた。

hellonigui_s01.png

雑感 :

wNim に比べると圧倒的に分かりやすい気がする…。しかも、現行版 Nim 2.2.8 でもコンパイルエラーを出さずに使えるし。さらにクロスプラットフォーム対応。もうこれでいいんじゃないか…?

ただ、シンプルな仕様にした分、制限もあるようで…。

「ボタンの背景色を変えることなどはできない」
「見た目を変えたいならカスタムコントロールを作れ。自前で描画処理を書くのが面倒だけど」
「そういう時は別のGUIライブラリを検討したほうがいい」

といった言及を公式サイト上で見かけた。

見た目にはこだわらず、質実剛健、シンプルイズベストで作るなら、このライブラリは実にイイ感じかもしれない。

というか、wNim を触って、やれコンパイルができないだの、レイアウト方法が分からないだので悩んでいたわけだけど、NiGui を触ったらどれもサクサクと動作確認ができて、wNim を試用していたことがちょっと馬鹿らしくなってきて…。ひとまず何かしら動いてくれないと話にならないわけで、動かせる状態にするだけでもスンナリ行かないライブラリはちょっとなあ…。

気になる点 :

ラベルを表示してみたら、ウインドウが表示されてからラベルが表示されるまで、ワンテンポ遅れる感じが…。何か計算してるのだろうか…。それともリトライ処理でもしてるのだろうか…。

以上です。

過去ログ表示

Prev - 2026/02 -
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project