2011-03-11 22 views
1

我想創建一個簡單的程序,顯示所有的gtk股票按鈕。
我抄股票的ID名單來源:
http://www.pygtk.org/pygtk2tutorial/ch-ButtonWidget.html
粘貼他們到一個.txt文件
和創建從文件列表:
stock_file = open('stock_buttons.txt')
stock_button_list = stock_file.readlines()
這使得它看起來的列表,如:
stock_button_list[0] = ' STOCK_DIALOG_INFO/n'
所以我連接了'gtk'。前綴和切掉多餘的
然後,我創建一個按鈕用於循環:
for each_button in stock_button_list:
self.button1 = gtk.Button(None, each_button)
如何從修改的字符串列表創建gtk.STOCK_ *按鈕?

但是Python的解釋each_button爲一個字符串,我得到了一堆與股票ID作爲只是標籤按鈕。 (
它的工作原理,如果我手動創建庫存ID名稱的列表:
stock_button_list = [gtk.STOCK_DIALOG_INFO, gtk.STOCK_DIALOG_WARNING, etc.]
我的目錄是很好,看起來像股票一樣的ID,但它是一個字符串列表

哪有我得到的Python識別字符串作爲股票鍵ID的全局變量??

回答

1

如此簡單:

for button in stock_button_list: 
    self.button1=gtk.Button(stock=getattr(gtk,button)) 

使用GETATTR您可以訪問所有的t他通過名稱來表示對象或模塊的屬性。

+0

感謝您的快速回答!不過,我仍然得到一個屬性錯誤:'模塊'對象沒有屬性? – 2011-03-11 11:04:47

+0

檢查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

+0

明白了。我列表中的最後一項是一個空字符串。非常感謝你的幫助!已解決 – 2011-03-11 11:37:32

0

一個例子:

>>> import gtk 
>>> a='STOCK_DIALOG_WARNING' 
>>> getattr(gtk, a) 
'gtk-dialog-warning' 
0

解決
作爲雷維爾說,使用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()