1

次のように、空き地とコードを使用してウィンドウ、コンボボックス、ボタンを作成しました。

module Main where
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Glade

main = do
    initGUI
    Just xml <- xmlNew "Tp.glade"
    window <- xmlGetWidget xml castToWindow "window1"
    button <- xmlGetWidget xml castToButton "button1"

    comboBox  <- xmlGetWidget xml castToComboBox "combobox1"

    onClicked button $ do
         putStrLn $ "Apply button selected " 
         selected <- comboBoxGetActiveText comboBox

         print selected

   onDestroy window mainQuit
   widgetShowAll window
   mainGUI

ComboBox からオプションを選択してアクション ボタンをクリックすると、次のエラー メッセージが表示されます UI.exe: user error (Pattern match failure in do expression at gtk\Graphics\UI\G tk\MenuComboToolbar\ComboBox.chs.pp: 244:2-13)

ComboBox からオプションを選択したときにアクションを実行するには、別の関数が必要ですか? 私を助けてください!!

4

2 に答える 2

0

Gtk2Hsのドキュメントに記載されているように、comboBoxGetActiveTextは、「comboBoxで現在アクティブな文字列を返すか、何も選択されていない場合はNothingを返します。この関数はcomboBoxNewTextで構築されたコンボボックスでのみ使用できることに注意してください。」

この機能を使用する場合は、次のいずれかのオプションを試してください。

  • コンボボックス(おそらくListStore)のTreeModelをGladeファイルに設定せず、行のcomboBoxSetModelText comboBox後に行を追加しますcomboBox <- xmlGetWidget xml castToComboBox "combobox1"。これは、comboBoxNewTextが「新しいコンボボックスを作成した後にcomboBoxSetModelTextを内部的に呼び出す」ために正しく機能する可能性があります。
  • comboBox <- xmlGetWidget xml castToComboBox "combobox1"Gladeファイルからコンボボックスウィジェットを削除し、自分で作成します(行を置き換えてcomboBox <- comboBoxNewText、プログラムのメインウィンドウに手動でパックします。

TreeModelsは任意のタイプのデータを保持できることに注意してください。HaskellはCやPythonなどの命令型言語とは異なる方法でデータを処理するため、Gladeで作成されたツリーモデルをHaskellアプリケーションにインポートすることはできません。Haskellプログラム内で定義する必要があります。

于 2012-12-09T23:13:38.963 に答える
0

この関数を使用するcomboBoxGetActiveと、Int が返され、comboBox. これはGraphics.UI.Gtk.MenuComboToolbar.ComboBoxAPI にあります。

于 2013-02-20T11:47:11.263 に答える