GTK detecting window resize from the user

前端 未结 5 931
我在风中等你
我在风中等你 2020-12-10 11:58

In GTK (or pygtk or gtkmm...)

How can I detect that an application window has been manually resized by the user, as is typically done by dragging th

5条回答
  •  粉色の甜心
    2020-12-10 12:15

    In my case I was trying to distinguish between a user resizing a Gtk.Paned from the user resizing the whole window. Both emitted the notify::position signal.

    My solution was, since I can't know if the user is resizing the window from the widget, reverse what I wanted to know. Record if the user has re-positioned the widget and ignore updates if the user didn't initiate them on my widget.

    That is to say, instead of testing "if window being resized" I recorded the button-press-event and button-release-event's locally so I could instead test "if widget being re-positioned"

    from gi.repository import Gtk
    
    class MyPaned(Gtk.Paned):
        _user_activated = False
    
        def on_position(self, _, gparamspec):
            if self._user_activated:
                # widget touched
    
            else:
                # window resized (probably)
    
        def on_button_press(self, *_):
            self._user_activated = True
    
        def on_button_release(self, *_):
            self._user_activated = False
    
    
        dev __init__(self, *args):
            super(MyPaned, self).__init__(*args)
            self.connect('notify::position', self.on_position)
            self.connect('button-press-event', self.on_button_press)
            self.connect('button-release-event', self.on_button_release)
    
    

    Effectively by recorded when the user started and ended interacting with my widget directly, I could assume the rest of the time was due to the window being resized. (Until I find more cases)

提交回复
热议问题