编辑GtkWidget属性/属性

时间:2013-03-02 22:44:53

标签: python styles gtk pygtk pygobject

在大多数pygtk小部件页面中,它们包含名为“属性”,“属性”和“样式属性”的部分。如何更改这些属性和属性?

4 个答案:

答案 0 :(得分:4)

有三种方法可以更改属性:

  1. 在zheoffec的回答中,使用set_property()函数(或set_style_property()作为样式属性。)这个函数在Python中实际上不是必需的,但它是完整的,因为它是一部分C API。

  2. 使用props属性。您可以通过此属性访问文档中找到的任何属性。例如,btn1.props.label = 'StackOverflow'btn1.props.use_underline = False

  3. 使用getter和setter函数作为frb建议。这些也只是因为它们是C API的一部分而存在,但是有些人比props属性更喜欢它们。此外,无法保证任何特定属性都具有getter和setter功能!通常在精心设计的C API中,它们会存在,但不是必需的。

  4. 对于样式属性,我认为唯一的选择是#1。对于“属性”,这些只是Python属性。要访问allocation属性,请使用btn1.allocation

答案 1 :(得分:1)

在PyGTK中,GtkWidget是所有其他窗口小部件类(包括您自己创建的窗口小部件类)继承自的基类。

就设置属性而言,您可能已经注意到无法直接设置它们:

btn1.label = "StackOverflow"

在PyGTK中,您需要使用set_为属性的名称添加前缀,如下所示:

btn1.set_label("StackOverflow")

如果属性名称中有-,就像使用use-underline一样,请将它们转换为下划线,例如set_use_underline。我想说我不认为这种吸气剂和固定剂的使用是非常pythonic。

这是一个完整的工作程序,取自ZetCode tutorial并已修改。

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()

答案 2 :(得分:1)

您可以使用Gtk.Widget.set_property(property, value)方法更改Widget属性。 property应该是一个字符串。

答案 3 :(得分:1)

要获取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'>