简单的应用程序
问题描述:
我创建了一个简单的Haskell程序显示一个窗口:简单的应用程序
module Main where
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Glade
data GUI = GUI {
mainWin :: Window,
clickMe :: Button,
display :: Label
}
loadGlade :: IO GUI
loadGlade = do
Just xml <- xmlNew "gladeFile.glade"
mw <- xmlGetWidget xml castToWindow "wdwFirst"
bc <- xmlGetWidget xml castToButton "btnClick"
ld <- xmlGetWidget xml castToLabel "lblDisplay"
return $ GUI mw bc ld
connectGui :: GUI -> IO (ConnectId Button)
connectGui gui = do
onDestroy (mainWin gui) mainQuit
onClicked (clickMe gui) (guiAnswer gui)
guiAnswer :: GUI -> IO()
guiAnswer gui =
labelSetText (display gui) "WELCOME!!"
main :: IO()
main = do
initGUI
gui <- loadGlade
connectGui gui
mainGUI
与林间空地创造了这个GUI文件:
<?xml version="1.0" encoding="UTF-8"?>
<glade-interface>
<!-- interface-requires gtk+ 2.24 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkWindow" id="wdwFirst">
<property name="can_focus">True</property>
<property name="title" translatable="yes">DEBUT</property>
<property name="window_position">center</property>
<property name="default_width">400</property>
<property name="default_height">250</property>
<child>
<widget class="GtkLayout" id="layout1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<widget class="GtkButton" id="btnClick">
<property name="label" translatable="yes">Click me!</property>
<property name="width_request">100</property>
<property name="height_request">23</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</widget>
<packing>
<property name="x">21</property>
<property name="y">20</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="lblDisplay">
<property name="width_request">350</property>
<property name="height_request">136</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">gdghh
</property>
</widget>
<packing>
<property name="x">43</property>
<property name="y">77</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>
的程序编译,并没有运行错误但是......没有出现,没有窗口。
我用格莱德3.8.5用GTK + 2
感谢
答
你忘了实际显示窗口。函数调用如
widgetShowAll window
似乎缺失。
编辑
这个主要功能应该工作:
main :: IO()
main = do
initGUI
gui <- loadGlade
connectGui gui
widgetShowAll (mainWin gui)
mainGUI
你是什么意思?有没有一个实际的函数'widgetShowAll',或者这只是一个建议? – AJFarmar
有一个叫做[widgetShowAll]的函数(http://hackage.haskell.org/package/gtk-0.13.9/docs/Graphics-UI-Gtk-Abstract-Widget.html#v:widgetShowAll)。这个[最小示例](http://code.haskell.org/gtk2hs/docs/tutorial/Tutorial_Port/chap2.xhtml)显示了您需要的功能。 (可惜这个教程已经过时了。) – lambda