Есть программа, но опять же на gtk без создания формы в Glade , которая при нажатии меняет имя кнопки.
Я попробовал такой вариант: В Glade создал окно, положил вертикальный бокс из 2-х секций, в верхнюю cекцию - кнопку, в нижнюю секцию - область событий eventbox и после label. Задал обработчики сигналов для button и eventbox. eventbox дал возможность использовать метку как кнопку. Самое интересное, что при задании функции def для label потребовало третий аргумент, хотя в аналогичной def для batton хватает и двух. Тут у меня появилась надежда. Задавал третьим аргументом и window, и box, и eventdox, и label, а оказалось ему(интерпретатору) тут нужно только количество и назови их хоть горшками. У меня в примере они такие : (всё, это, пустяки). Кириллицу, конечно, не берёт)))
1)Нажимаем кнопку 2) Нажимаем на метку 3) Получаем:
>>>
Hello World!
Сколько можно?
но это в Shell IDLE или в консоли, а как в форму загнать???????????
Далее я приведу код hml и код Python. Можно скопировать hml и сохранить его как builder_example.glade и,
запустив питона посмотреть как мелко я плаваю
<?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.18.3 --> <interface> <requires lib="gtk+" version="3.12"/> <object class="GtkWindow" id="window1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="default_width">440</property> <property name="default_height">250</property> <signal name="destroy" handler="on_window1_destroy" swapped="no"/> <child> <object class="GtkBox" id="box1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> <object class="GtkButton" id="button1"> <property name="label" translatable="yes">button</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> <signal name="clicked" handler="on_button1_clicked" swapped="no"/> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkEventBox" id="eventbox1"> <property name="visible">True</property> <property name="can_focus">False</property> <signal name="button-press-event" handler="on_eventbox1_button_press_event" swapped="no"/> <child> <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">label</property> </object> </child> </object> <packing> <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </interface>
#!/usr/bin/env python # -*- coding: utf-8 -*- from gi.repository import Gtk class Handler: def on_window1_destroy(self, *args): Gtk.main_quit (*args) def on_button1_clicked (self, button): print("Hello World!") def on_eventbox1_button_press_event (vse,eto,pustyaki): print("Сколько можно?") builder = Gtk.Builder() builder.add_from_file("builder_example.glade") builder.connect_signals(Handler()) window = builder . get_object ( "window1" ) window.show_all() Gtk . main ()