3

ほとんどのpygtkウィジェットページには、「属性」、「プロパティ」、および「スタイルプロパティ」と呼ばれるセクションが含まれています。これらのプロパティと属性を変更するにはどうすればよいですか?

4

4 に答える 4

4

プロパティを変更するには、次の3つの方法があります。

  1. zheoffecの回答のように、set_property()関数を使用します(またはset_style_property()スタイルプロパティに使用します)。この関数は実際にはPythonでは必要ありませんが、C APIの一部であるため、完全を期すためにあります。

  2. 属性を使用しpropsます。ドキュメントにあるすべてのプロパティには、この属性を介してアクセスできます。たとえば、btn1.props.label = 'StackOverflow'およびbtn1.props.use_underline = False

  3. frbが示唆するように、getter関数とsetter関数を使用します。これらもCAPIの一部であるためにのみ存在しますが、props属性よりも好む人もいます。また、特定のプロパティにゲッター関数とセッター関数があるという保証はありません。通常、適切に設計されたC APIには存在しますが、必須ではありません。

スタイルプロパティの場合、唯一のオプションは#1だと思います。「属性」の場合、まあ、これらは単にPython属性です。allocation属性にアクセスするには、を使用しますbtn1.allocation

于 2013-03-03T09:50:26.293 に答える
2

そこにあるすべてのウィジェットを取得するにはwidget.prosリスト:

button = gtk.Button()
for pspec in button3.props:
  print pspec
  #print button3.get_property(pspec.name)

出力:

<GParamObject 'related-action'>
<GParamBoolean 'use-action-appearance'>
<GParamPointer 'user-data'>
<GParamString 'name'>
<GParamObject 'parent'>
<GParamInt 'width-request'>
<GParamInt 'height-request'>
<GParamBoolean 'visible'>
<GParamBoolean 'sensitive'>
<GParamBoolean 'app-paintable'>
<GParamBoolean 'can-focus'>
<GParamBoolean 'has-focus'>
<GParamBoolean 'is-focus'>
<GParamBoolean 'can-default'>
<GParamBoolean 'has-default'>
<GParamBoolean 'receives-default'>
<GParamBoolean 'composite-child'>
<GParamObject 'style'>
<GParamFlags 'events'>
<GParamEnum 'extension-events'>
<GParamBoolean 'no-show-all'>
<GParamBoolean 'has-tooltip'>
<GParamString 'tooltip-markup'>
<GParamString 'tooltip-text'>
<GParamObject 'window'>
<GParamBoolean 'double-buffered'>
<GParamUInt 'border-width'>
<GParamEnum 'resize-mode'>
<GParamObject 'child'>
<GParamString 'label'>
<GParamObject 'image'>
<GParamEnum 'relief'>
<GParamBoolean 'use-underline'>
<GParamBoolean 'use-stock'>
<GParamBoolean 'focus-on-click'>
<GParamFloat 'xalign'>
<GParamFloat 'yalign'>
<GParamEnum 'image-position'>
于 2013-10-22T22:10:43.087 に答える
1

PyGTKでは、GtkWidget他のすべてのウィジェットクラス(自分で作成する可能性のあるものを含む)が継承する基本クラスです。

プロパティの設定に関しては、直接設定できないことに気付いたと思います。

btn1.label = "StackOverflow"

set_PyGTKでは、次のように、プロパティの名前の前に。を付ける必要があります。

btn1.set_label("StackOverflow")

-のようにプロパティ名にが含まれている場合は、のuse-underlineようにアンダースコアに変換しますset_use_underline。私は、このゲッターとセッターの使用は非常にパイソン的ではないと思います。

これは、 ZetCodeチュートリアルから取得して変更した、完全に機能するプログラムです。

import gtk

class PyApp(gtk.Window):
    def __init__(self):
        super(PyApp, self).__init__()

        self.set_title("Buttons")
        self.set_size_request(250, 200)
        self.set_position(gtk.WIN_POS_CENTER)

        btn1 = gtk.Button("Button")
        btn1.set_label("StackOverflow")
        btn1.set_use_underline(False)

        fixed = gtk.Fixed()

        fixed.put(btn1, 20, 30)

        self.connect("destroy", gtk.main_quit)

        self.add(fixed)
        self.show_all()


PyApp()
gtk.main()
于 2013-03-02T23:11:28.800 に答える
1

Gtk.Widget.set_property(property, value)メソッドを使用して、Widgetプロパティを変更できます。property文字列である必要があります。

于 2013-03-02T23:34:20.433 に答える