私は3か月からgladeとpygtkを使ってPythonで開発していますが、それに慣れる前でさえ、それはすでに時代遅れでした。
Archlinuxを使用すると、私のシステムは常に最新の状態になっているため、gtk2に比べて機能が少し不足していることに気付いたとしても、gtk3を使用せざるを得ません。
そこで、pygobjectに切り替えることにしました。残念ながら、ドキュメントは完全ではありません。
グレイドファイルとPythonコードを新しいシステムに正常にアップグレードしましたが、1つのエラーが発生します。
私のプログラムの1つに、エントリのあるコンボボックスがあります。コンボボックスから選択されたか、ユーザーが入力したかに関係なく、get_active_text()メソッドを呼び出してエントリのコンテンツを取得するために使用します。
このメソッドはもう存在しないので(エラーが発生したためだと思います)、代わりにこれを使用します:
def get_license(self):
#return self.combobox_license.get_active_text()
tree_iter = self.combobox_license.get_active_iter()
if tree_iter != None:
model = self.combobox_license.get_model()
return model[tree_iter][0]
else:
entry = self.combobox_license.get_child()
return entry.get_text()
ご覧のとおり、古いコードにはコメントが付いています。
このコードは機能しますが、奇妙な問題があります。エントリを使用できません。
コンボボックスからテキストを選択できますが、エントリが使用できません。選択はできますが、入力できません。
これは、どこかでアクティブ化する必要がある新しい動作ですか?プログラムのgtk2バージョンでは、問題はありません。
これが私の空き地ファイルのコンボボックスエントリを説明する部分です:
<object class="GtkComboBox" id="combobox_license">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">liststore_license</property>
<property name="has_entry">True</property>
<property name="entry_text_column">0</property>
<signal name="changed" handler="on_combobox_license_changed" swapped="no"/>
<child>
<object class="GtkCellRendererText" id="cellrenderertext_license"/>
</child>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry2">
<property name="can_focus">False</property>
<property name="buffer">entrybuffer1</property>
</object>
</child>
</object>
テキストを含むgchararrayタイプの1つの列を持つリストストアを作成しました。セルはGtkCellRendererによってレンダリングされます(ただし、cellrendererのプロパティ "text"は定義されていません。これを0(gchararray)に定義すると、テキストが2回取得されるためです!)
エントリバッファを追加すると役立つと思いましたが、何も変わりません。
編集:私は解決策を見つけました:埋め込みエントリのcan_focusはfalseでした。これで、エントリバッファを必要とせずに機能します。
これを投稿する前に解決策を見つけましたが、他のユーザーにもこの問題が発生した場合に備えて投稿します。