Код ниже создает столбец из трех меток. Я хотел бы взять среднюю метку и заменить ее другим виджетом, используя текст из метки после первоначального создания пользовательского интерфейса.
Мой фактический вариант использования - взять пользовательский интерфейс, заполненный GTKBuilder, и заменить любую конкретную именованную метку динамически обернутой меткой во время выполнения. (Здесь я использовал кнопку, потому что она простая, но четкая.) Затем я все еще могу использовать Glade для настройки пользовательского интерфейса, включая метки, и не добавлять в свой код 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()
label.set_text()
вашего экземпляра метки. - person heltonbiker   schedule 13.05.2011