首页 > 解决方案 > 我们如何在 pygobject 的处理程序中处理事件?

问题描述

我有一个 glade 文件,它从输入框中获取输入,并在单击按钮时将其显示为标签。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="windows1">
    <property name="can_focus">False</property>
    <child>
      <placeholder/>
    </child>
    <child>
      <object class="GtkFixed">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">Submit</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="x">182</property>
            <property name="y">146</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="box1">
            <property name="width_request">100</property>
            <property name="height_request">80</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
          </object>
          <packing>
            <property name="x">68</property>
            <property name="y">45</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="label1">
            <property name="width_request">100</property>
            <property name="height_request">80</property>
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">label</property>
          </object>
          <packing>
            <property name="x">321</property>
            <property name="y">44</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

这是我的 pygobject 代码

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class Handler:
    def gtk_main_quit(self, *args):
        Gtk.main_quit()

    def on_button1_clicked(self, button):
        print("Hello World!")
        ## Take text value from Entry box and show it in Label

builder = Gtk.Builder()
builder.add_from_file("example.glade")
builder.connect_signals(Handler())

window = builder.get_object("windows1")
window.show_all()

Gtk.main()

目前在按钮点击它会打印Hello World!。现在我们如何告诉on_button1_clicked方法从带有 id 的输入框中获取输入box1并将其显示在带有 id 的标签中label1

标签: pythongtk3gladepygobject

解决方案


如果有人感兴趣,这就是我解决问题的方法

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk 
    
class Handler:
    def gtk_main_quit(self, *args):
        Gtk.main_quit()

    def on_button1_clicked(self, button):
        text = box.get_text()
        label.set_text(text)
        ## Take text value for Entrybox and show it in label

builder = Gtk.Builder()
builder.add_from_file("example.glade")
builder.connect_signals(Handler())

window = builder.get_object("windows1")
label = builder.get_object("label1")
box = builder.get_object("box1")
window.show_all()

Gtk.main()

推荐阅读