在大多數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. PowerShell的編輯#text屬性
- 4. 編輯JSON - 添加屬性
- 5. 使用Best_in_Place編輯屬性
- 6. Azure AD B2C編輯屬性
- 7. CKEditor編輯數據屬性
- 8. 如何編輯div:hover屬性?
- 9. 編輯器的html屬性
- 10. Symfony - 動態編輯屬性
- 11. 在PropertyGrid中顯示並編輯屬性的子屬性
- 12. 使用屬性編輯器將屬性添加到類
- 13. 在自定義屬性(Umbraco)中使用MediaPicker屬性編輯器
- 14. 從shell腳本編輯屬性文件中的屬性值
- 15. 編號屬性
- 16. 創建屬性集和屬性編程
- 17. 屬性屬性
- 18. Django的表單集屬性編輯
- 19. 對象屬性編輯框架
- 20. Asp.Net MVC 3動態屬性編輯器
- 21. 可可屬性編輯器控件?
- 22. 使用Spring Forms編輯對象屬性
- 23. 無法編輯Combobox DropDownStyle屬性
- 24. 在OpenXML中編輯eastAsia屬性
- 25. XElement修改,如何編輯屬性?
- 26. 觀察UITableViewController的編輯屬性
- 27. 在html中編輯javascript屬性
- 28. AdvancedDataGrid可編輯屬性問題
- 29. 編輯jstree節點的所有屬性
- 30. 富文本編輯器的屬性
很好的答案,謝謝 – 2013-03-03 10:48:26