解決
作爲雷維爾說,使用GETATTR(OBJ,名稱)以訪問gtk.STOCK_ *按鍵與一個字符串列表。
只要確保列表中的每個項目都與對象中的有效名稱匹配,就會引發AttributeError。
這是我完成的程序。它只是顯示所有的股票按鈕。
*注意:爲了使此程序正常工作,您需要在同一個目錄中創建stock_buttons.txt。只需將上述問題鏈接中的庫存ID列表粘貼到文本文件中即可。
#!/usr/bin/env python
# stock_buttons.py
# Simple program to show all stock buttons
# Author: oringe
import pygtk
pygtk.require('2.0')
import gtk
class stock_buttons:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("gtk.STOCK_[Buttons]")
self.window.connect("destroy", lambda wid: gtk.main_quit())
self.window.connect("delete_event", lambda a1,a2:gtk.main_quit())
self.window.set_border_width(10)
# This horizontal box will contain the columns
self.boxH = gtk.HBox(False, 0)
self.window.add(self.boxH)
# Pack the five columns into the HBox
self.box1 = gtk.VBox(False, 0)
self.boxH.pack_start(self.box1, True, True, 0)
self.box2 = gtk.VBox(False, 0)
self.boxH.pack_start(self.box2, True, True, 0)
self.box3 = gtk.VBox(False, 0)
self.boxH.pack_start(self.box3, True, True, 0)
self.box4 = gtk.VBox(False, 0)
self.boxH.pack_start(self.box4, True, True, 0)
self.box5 = gtk.VBox(False, 0)
self.boxH.pack_start(self.box5, True, True, 0)
# Make the list of stock buttons
stock_file = open('stock_buttons.txt')
stock_button_list = stock_file.readlines()
# Slice off excess spaces and line breaks
i = 0
for each_string in stock_button_list:
stock_button_list[i] = stock_button_list[i][2:-1]
i += 1
# Pack 15 buttons per column
i2 = 0
for button in stock_button_list:
if i2 < 15:
self.button1 = gtk.Button(stock=getattr(gtk, button))
self.box1.pack_start(self.button1, True, True, 0)
self.button1.show()
i2 += 1
elif i2 > 14 and i2 < 30:
self.button1 = gtk.Button(stock=getattr(gtk, button))
self.box2.pack_start(self.button1, True, True, 0)
self.button1.show()
i2 += 1
elif i2 > 29 and i2 < 45:
self.button1 = gtk.Button(stock=getattr(gtk, button))
self.box3.pack_start(self.button1, True, True, 0)
self.button1.show()
i2 += 1
elif i2 > 44 and i2 < 60:
self.button1 = gtk.Button(stock=getattr(gtk, button))
self.box4.pack_start(self.button1, True, True, 0)
self.button1.show()
i2 += 1
elif i2 > 59 and i2 < 75 and button != '': #Last item in list is empty''
self.button1 = gtk.Button(stock=getattr(gtk, button))
self.box5.pack_start(self.button1, True, True, 0)
self.button1.show()
i2 += 1
self.box1.show()
self.box2.show()
self.box3.show()
self.box4.show()
self.box5.show()
self.boxH.show()
self.window.show()
def main():
gtk.main()
if __name__ == "__main__":
mybuttons = stock_buttons()
main()
感謝您的快速回答!不過,我仍然得到一個屬性錯誤:'模塊'對象沒有屬性? – 2011-03-11 11:04:47
檢查stock_button_list中的按鈕列表是否採用以下格式:['STOCK_DIALOG_WARNING','STOCK_DIALOG_INFO',...'STOCK_XXXXXXX'],您使用getattr獲取gtk模塊內的屬性,所以atrribute名稱應該是存在的屬性。可能您的列表正在使用'gtk.STOCK_DIALOG_WARNING'而不是'STOCK_DIALOG_WARNING' – Revil 2011-03-11 11:23:26
明白了。我列表中的最後一項是一個空字符串。非常感謝你的幫助!已解決 – 2011-03-11 11:37:32