如何在 Haskell 的 GI-Gtk 中将 Widget 投射到标签?
How do I cast Widget to Label in Haskell's GI-Gtk?
我有这个示例代码,其中有一个包含 ListBoxRows 的 ListBox,而 ListBoxRows 又包含一个标签。当我单击 ListBox 时,我得到一个 ListBoxRow。到目前为止,一切都很好。当我想与 ListBoxRows 子项交互时,问题就开始了。
我已经使用这个函数来获取标签,它是 ListBoxRow 的子项。
https://hackage.haskell.org/package/gi-gtk-3.0.18/docs/GI-Gtk-Objects-Container.html#g:13
但是,返回的类型是Widget。如何转换对象的类型?函数 widgetGetName 告诉我它是一个标签,但是 Haskell 类型系统坚持它是一个 Widget,所以我不能使用标签特定的函数。
工作代码
_ <- onListBoxRowSelected listbox2 (\(Just r) -> do
cc <- containerGetChildren r
mlabel <- castTo Label (head cc)
case mlabel of
Nothing -> putStrLn "Not a label!"
Just label -> (labelGetText label) >>= putStrLn . unpack)
感谢丹
试试这个:
cc <- containerGetChildren r
mlabel <- castTo Label (head cc)
case mlabel of
Nothing -> putStrLn “Not a label!”
Just label -> labelGetText label >>= putStrLn
我有这个示例代码,其中有一个包含 ListBoxRows 的 ListBox,而 ListBoxRows 又包含一个标签。当我单击 ListBox 时,我得到一个 ListBoxRow。到目前为止,一切都很好。当我想与 ListBoxRows 子项交互时,问题就开始了。
我已经使用这个函数来获取标签,它是 ListBoxRow 的子项。 https://hackage.haskell.org/package/gi-gtk-3.0.18/docs/GI-Gtk-Objects-Container.html#g:13
但是,返回的类型是Widget。如何转换对象的类型?函数 widgetGetName 告诉我它是一个标签,但是 Haskell 类型系统坚持它是一个 Widget,所以我不能使用标签特定的函数。
工作代码
_ <- onListBoxRowSelected listbox2 (\(Just r) -> do
cc <- containerGetChildren r
mlabel <- castTo Label (head cc)
case mlabel of
Nothing -> putStrLn "Not a label!"
Just label -> (labelGetText label) >>= putStrLn . unpack)
感谢丹
试试这个:
cc <- containerGetChildren r
mlabel <- castTo Label (head cc)
case mlabel of
Nothing -> putStrLn “Not a label!”
Just label -> labelGetText label >>= putStrLn