如何在 GNU Smalltalk 中 运行 GUI 相关代码?

How to run GUI related code in GNU Smalltalk?

我有以下来自 Dolphin Smalltalk 的代码:

digitalClockProcess := [[

       Processor sleep: 1000.

       (View desktop canvas)

               font: (Font name: 'Arial' pointSize: 36) beBold;

               text: Time now printString at: 10@10;

               free

] repeat] fork.

在桌面上显示一个数字时钟。这段代码在 GNU Smalltalk 上可以是 运行 吗?我在 VirtualBox VM 上的 Fedora 上尝试了 gstgst-blox,但没有用,gst-blox 在 Ubuntu 上不存在,gst-browser 在Fedora 和 Ubuntu 都给出了

Object: CFunctionDescriptor new: 1 "<0x7ffb3a010dc0>" error: Invalid C call-out g_date_get_type

启动应用程序时。在 GNU Smalltalk 中是如何完成的?

可以找到有关如何下载和构建 GNU smalltalk 的说明 here。这应该可以解决 ubuntu.

上可用的 gst-blox(带 GUI 的 GNU smalltalk)的问题

我不熟悉 GNU Smalltalk(我使用 Pharo),所以也许有更好的方法来编写代码,但无论如何。

安装

gst 从包管理器安装不需要任何 GUI(它是一个 CLI),即使它提供了它们,它也不会将必要的系统库拉到 运行 它们,所以你必须安装它们 manually:

  • for gst-browser(新 ui):libgtk2.0 libcairo2(在 ubuntu 上测试)
  • for gst-blox(旧 ui):tcl tk(未测试)

代码

我看到代码有两个问题:GST 不支持 Process>>sleep:,它使用 GUI.

至于 GUI,Smalltalks 有非常不同的 UI 库,Dolphin 面向 MS Windows,GNU Smalltalk 使用 GNU 的东西(GTK 用于 newser gst-browser,和 TK/TCL 对于较旧的 gst-blox 似乎),Pharo 使用 Athens 等。即使他们共享一些概念(例如 MVC 模式),他们并没有真正共享 API.

事实上,GNUSmalltalk 似乎有“新”UI --- VisualGST(gst-browser)并且 gst-blox 已被弃用。

无论如何,经过一番挖掘,我最终得到了以下代码。它创建一个 GTK window(gst-browser 使用 UI),然后不断更新文本。

window := GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel.
window setTitle: 'Time'.
window resize: 400 height: 300.
label := GTK.GtkLabel new.
label setText: Time now printString.
label show.
window add: label.
window show.

digitalClockProcess := [[
    (Delay forSeconds: 1) wait.
    label setText: Time now printString.
] repeat] fork.

gst-blox 的代码必须改用 tcl/tk,我不熟悉。

运行代码

到 运行 gst-browser 中的代码,从顶部菜单 select 'Tools > Bottom Pane',然后将代码粘贴到 'Workspace'底部窗格(您可以通过 'File > New Workspace'.

添加更多工作区