如何在 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 上尝试了 gst
和 gst-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'.
添加更多工作区
我有以下来自 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 上尝试了 gst
和 gst-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'.