在大多数pygtk小部件页面中,它们都包含名为“属性”,“属性”和“样式属性”的部分。我怎样才能改变这些属性和属性?编辑GtkWidget属性/属性
回答
有三种方法来更改属性:(样式属性或set_style_property()
)
正如zheoffec的回答,请使用
set_property()
功能,此功能其实并没有在Python必要的,但它是有完整性,因为它是C API的一部分。使用props
属性。您可以通过此属性访问您在文档中找到的任何属性。例如,btn1.props.label = 'StackOverflow'
和btn1.props.use_underline = False
。按照frb的建议使用getter和setter函数。这些也仅存在,因为它们是C API的一部分,但有些人更喜欢它们的
props
属性。此外,不保证任何特定的财产将具有吸气和设置功能!通常在精心设计的C API中,它们将会在那里,但它不是必需的。
对于样式属性,我相信唯一的选择是#1。对于“属性”,这些只是Python属性。要访问allocation
属性,请使用btn1.allocation
。
在PyGTK中,GtkWidget
是所有其他窗口小部件类(包括您自己制作的窗口类)继承的基类。
至于设置属性的话,你可能会注意到你不能直接将它们设置:
btn1.label = "StackOverflow"
在PyGTK的,你需要set_
的前缀属性的名称,就像这样:
btn1.set_label("StackOverflow")
如果在属性名称中有-
,就像use-underline
一样,将它们变成下划线,如set_use_underline
。我想说,我不认为这种使用getter和setter的方法是非常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()
是的,我知道这一点,而是采取例如pygobject的Gtk.RadioToolButton,不具有一个独立的'join_group()'方法,除了创建一个新的'RadioToolButton'并将其添加到一个组中的方法。如果我想修改现有的RadioToolButton组,我需要修改一个属性(我刚刚发现了该怎么做;)(请参阅我的答案))。 – 2013-03-02 23:32:44
您可以使用Gtk.Widget.set_property(property, value)
方法更改Widget属性。 property
应该是一个字符串。
它实际上是一个GObject方法,它可以处理不是小部件的对象,例如gtk.TextTag。 – Dave 2013-03-16 20:42:33
要获取所有控件有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'>
- 1. XML编辑属性
- 2. 编辑Jtable属性
- 3. 的Java属性编辑器 - 如何强制我创建了一个属性编辑器属性编辑器
- 4. Java Swing属性编辑器
- 5. Azure AD B2C编辑属性
- 6. 编辑JSON - 添加属性
- 7. Symfony - 动态编辑属性
- 8. 编辑器的html属性
- 9. TColumn.FieldName属性编辑器
- 10. 使用Best_in_Place编辑属性
- 11. 如何编辑div:hover属性?
- 12. CKEditor编辑数据属性
- 13. 在magento中编辑属性
- 14. 编辑Matlab的`ezmesh`属性
- 15. PowerShell的编辑#text属性
- 16. 编辑MSI属性表
- 17. 从qml编辑QObject属性
- 18. 在自定义属性(Umbraco)中使用MediaPicker属性编辑器
- 19. 使用属性编辑器(ControlsFX)的属性表示例
- 20. 使用属性编辑器将属性添加到类
- 21. 在PropertyGrid中显示并编辑属性的子属性
- 22. 从shell脚本编辑属性文件中的属性值
- 23. 编号属性
- 24. jQuery属性或硬编码属性
- 25. 创建属性集和属性编程
- 26. 属性属性
- 27. 编辑元素属性不起作用
- 28. Umbraco属性自定义编辑器
- 29. 本地属性编辑器类型DBReg
- 30. 使用sed编辑PDF属性
很好的答案,谢谢 – 2013-03-03 10:48:26