在大多數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