下面的代碼創建了一個由三個標籤組成的列。我想採用中間標籤,並在初始創建UI後,使用標籤中的文本替換爲其他小部件。PyGTK小部件的就地替換
我的實際使用案例是採用GTKBuilder填充的UI,並在運行時用dynamically wrapped label替換任何特定的名稱標籤。 (我在這裏使用了一個按鈕,因爲它很簡單但是截然不同)。然後,我仍然可以使用Glade設置UI,包括標籤,並且如果我稍後想要製作標籤包裝,請不要在錯誤的標籤和字符串中粘貼我的Python代碼。
代碼不起作用 - 新按鈕被添加到列的末尾,我希望它保持在中間,其中label2
開始。我能做些什麼,最好在wrap_in_button
,以確保它在正確的地方結束?我寧願保持一般,因爲父母可能是Box
或Table
或任何一般Container
。
import pygtk
import gtk
def destroy(widget, data=None):
gtk.main_quit()
def wrap_in_button(label):
text = label.get_text()
button = gtk.Button(text)
parent = label.get_parent()
if parent:
parent.remove(label)
parent.add(button)
def Main():
# Pretend that this chunk is actually replaced by GTKBuilder work
# From here...
window = gtk.Window()
window.connect('destroy', destroy)
box = gtk.VBox()
window.add(box)
label1 = gtk.Label("Label 1")
label2 = gtk.Label("Label 2")
label3 = gtk.Label("Label 3")
box.pack_start(label1)
box.pack_start(label2)
box.pack_start(label3)
# ...up to here
# Comment this to see the original layout
wrap_in_button(label2)
window.show_all()
gtk.main()
if __name__ == "__main__":
Main()
如果您需要的僅僅是替換標籤中的TEXT(而不是替換標籤本身),則可以使用標籤實例的label.set_text()方法。 – heltonbiker 2011-05-13 14:10:47
@heltonbiker - 不,我會用動態包裝標籤小部件替換它(請參閱鏈接)。 – detly 2011-05-13 14:37:42