2012-03-13 3 views
0

GtkLabelに表示されるデータがいくつか含まれているGtkTableがあります。これらのラベルは、ラベルの整形(整列、パディング、前景色)を行うことができます。 表がどのように見えるかの例:テーブルを編集可能/選択可能なラベルでいっぱいにするには良い方法はありますか?

The Display---a GtkTable filled with GtkLabels

この表の情報の各行は、あなたが見る、テーブルに取り付けた独自のGtkLabelの中に表示されています。さて、私は、データを選択可能にし、おそらく編集可能にしようとしています。データがいくつかのウィジェット(それぞれ独自のGtkLabel)に分散され、複数のウィジェットにまたがってテキストを選択可能にする方法がないように思われるので、これは非常に簡単なことではありません。

本質的に、私はGtkEventBoxにイベントを登録することができるように、またイベントボックス内にイベントを登録することができます(よく、その子VBox )はGtkTextViewであり、GtkTableの内容と同じテキスト(書式なし)を含んでいます。このテキストビューは、テーブルから必要な編集可能な選択可能な領域として機能します。この機能を実現するために、私はテーブルとテキストビューの可視性を互いに反対に保ちます。したがって、ボックスの中で互いに重なり合って、それらは 'モード'を切り替える同じウィジェットであるように見えます。

のTextView:

The Editable--A GtkTextView containing the same text as in the Display

ので、この視認性のトグルで、私は、たとえば、ボタンを押し/離しイベントイベントボックスにいくつかの信号を添付することができ、フォーカスイン/アウトのタイプをイベントを使用して、テーブルの望ましいモードを取得します。

より良く理解を得るために、いくつかのサンプルコード:だから

eventbox = gtk.EventBox() 
vbox = gtk.VBox() 
table = gtk.Table() #Create the table, and fill it with labels 
textview = gtk.TextView() #Create the textview, and set its textbuffer to the same data as the table 

eventbox.add(vbox) 
vbox.pack_start(table) 
vbox.pack_start(textview) 
eventbox.connect("button-release-event", toggle_mode) 
textview.connect('focus-out-event', toggle_mode) 

def toggle_mode(widget, event): 
    if table.get_visible(): 
     table.set_visible(False) 
     textview.set_visible(True) 
    else: 
     table.set_visible(True) 
     textview.set_visible(False) 

を、私の質問は:これは私が達成したい何のために良い方法ですか?誰もがこれを行うための他の経験や良い方法がありますか?最終的には、GtkTableが書式設定されたGtkLabelの外観で満たされているのと同じように、きれいに書式設定されたテキストを作成したいのですが、テキストの塊を1つのピースとして選択することができます。これはどうすればできますか?

答えて

2

私はGtkTextViewをすべて使用することをお勧めしますが、外観にGtkLabelを使用することを強くお勧めするならば、あなたの方法はどんなものでも良いです(この種の別の一般的な方法はタブを隠してGtkNotebookを使うことです) 。

あなたはまだテキストを編集できることをユーザーに知らせるために視覚的な表示が必要です。おそらくトグルボタン。

+0

私はGtkTextViewの使用を検討しましたが、私の唯一の懸案事項はフォーマットです。私は、色付けとテキストの書式設定を行うためのテキストテーブルなどがあることを知っていますが、そこで整列とパディングを得ることも非常に重要です。私は複数の列を持ついくつかのテーブルを持っている、それぞれは特定の方法で整列。 GtkTextViewからこの種の機能を利用できますか? – Wes

+0

アライメントを変更したり、テキスト内のテーブルやパディングを知らなくてもいいと思います。そう、ええ、質問であなたが説明したことはおそらく最善の方法です。 –

+0

提案していただきありがとうございます。私はいくつかのGtkTextViewを一緒にGtkHBox(テキストビューはテーブル内の列を表していました)にまとめて使用することになりました。この方法では、選択可能な/編集可能なテキストを列ごとに取得できましたが、それでも私が好きなようにフォーマットすることができます。 – Wes

関連する問題