GTK中的动作和直接使用信号有什么区别吗?

问题描述 投票:0回答:1

看起来动作和信号很相似。他们之间有什么区别吗?行动比信号更高层次?

例如,我想按一个按钮来做某事, 我可以使用行动:

<object class="GtkButton">
  <property name="label">Start</property>
  <property name="action-name">app.start</property>
</object>
class xxxApplication(Adw.Application):
    def on_button_clicked(self,widget,_):
        print('Button pressed.')
    
    def create_action(self):
        action = Gio.SimpleAction.new("start", None)
        action.connect("activate", self.on_button_clicked)

我也可以直接使用信号:

  <object class="GtkButton">
    <property name="label">Start</property>
    <signal name="clicked" handler="on_button_clicked"/>
  </object>
class xxxWindow(Adw.ApplicationWindow):   
    @Gtk.Template.Callback()
    def on_button_clicked(self, button):
        print('Button pressed.')
python gtk gnome
1个回答
0
投票

虽然最终结果相同,但actionssignals有一些差异。主要区别之一是可以向 actions 添加快捷方式,但不能向 signals 添加快捷方式,至少不能直接添加。另一个重要的区别是actions可以直接在菜单项上使用,而signals更难使用。

一般来说,actions是在整个应用程序中考虑重用而设计的,而signals则用于更具体的情况。如果您需要由键盘快捷键、菜单项和按钮触发的功能,您可以使用三个 signal 或单个 action 来解决此问题。

传递给函数的参数也有差异,从这个意义上说,signalsactions更灵活。

© www.soinside.com 2019 - 2024. All rights reserved.