0

Glade を使用して単純な GUI をすばやくコーディングし、ラベルのテキストをエラーの内容に設定できる汎用エラー ダイアログを作成しようとしています。典型的な GUI 開発 (子フォームの取得、ラベルのキャプション属性の設定など) では非常に簡単です。

ただし、PyGTK/Glade でそのラベルを制御する方法がわかりません。

これが私のダイアログのXMLです...

<object class="GtkMessageDialog" id="dError">
    <property name="can_focus">False</property>
    <property name="border_width">5</property>
    <property name="type_hint">dialog</property>
    <property name="skip_taskbar_hint">True</property>
    <property name="message_type">error</property>
    <property name="buttons">close</property>
    <child internal-child="vbox">
      <object class="GtkVBox" id="dialog-vbox">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="spacing">2</property>
        <child internal-child="action_area">
          <object class="GtkHButtonBox" id="dialog-action_area">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="layout_style">end</property>
            <child>
              <placeholder/>
            </child>
            <child>
              <placeholder/>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="pack_type">end</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="lblError">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>

そして、これが私が試している関連するPythonコードで、2回試行しています。最初はエラー ダイアログのテキスト フィールドを設定しようとしていましたが、2 つ目はラベルを追加して、最初にそれを取得して設定しようとしました。

dError = self.builder_.get_object("dError") # get dialog

# Attempt 1 - setting the text field of the error dialog
# dError.set_text("Attempt 1")  
    #-- AttributeError: 'gtk.MessageDialog' object has no attribute 'set_text'

# Attempt 2 -setting an added label
# dLbl = dError.get_object("lblError")
    #-- AttributeError: 'gtk.MessageDialog' object has no attribute 'get_object'
# dlbl.set_text("Attempt 2")  

dError.show()
return True
4

1 に答える 1

3

提供したxmlの場合、ラベルのテキストを次のように設定できます

dError.label.set_text("test")

あなたの問題は、ラベル自体ではなく MessageDialog にアクセスしていたことです。上記はショートカットです。より一般的には、ラベルにアクセスできます (xml と比較することで、ラベルがどのように機能するかを簡単に追跡できるはずです)。

vbox = dError.get_child()
hbox, label1, hbuttonbox = vbox.get_children()
label1.set_text("Test1")
im, vbox2 = hbox.get_children()
label2, label3 = vbox2.get_children()
label2.set_text("Text2")
label3.set_text("Text3") #This one is invisible as default
于 2012-10-15T16:03:34.317 に答える