社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在wxpython中收听帧大小/移动更改事件

Alex • 3 年前 • 1390 次点击  

正确的发布方式是什么。听听wxpython中的尺寸变化事件?

我相信这很简单,但我不知道如何在类之间很好地实现这一点(请原谅任何新手明显的错误)。

我可以使用pypubsub发送事件,但这仅在创建UI类时由侦听器捕获(即侦听一次,而不是在随后调整帧大小时)。

听众:

    # listeners - define before the event
    pub.subscribe(self.on_resized, 'size_changed')
    pub.subscribe(self.on_relocated, 'pos_changed')

出版商:

def on_size(self, event):
    _size = event.GetSize()
    pub.sendMessage('size_changed', size=_size)
    
def on_move(self, event):
    _pos = event.GetPosition()
    pub.sendMessage('pos_changed', pos=_pos)
    

我试过使用CallAfter,但这似乎没有帮助(不太确定我在用它做什么,但认为它可能会在后面调用事件)

def on_size(self, event):
    _size = event.GetSize()
    wx.CallAfter(pub.sendMessage, 'size_changed', size=_size)


def on_move(self, event):
    _pos = event.GetPosition()
    wx.CallAfter(pub.sendMessage, 'pos_changed', pos=_pos)

我还尝试了第二种CallAfter,似乎听了两遍(有进步吗?),但我理解这是由结果断言错误格式化的

def on_size(self, event):
    _size = event.GetSize()
    # test incorrect formatting of call after...
    wx.CallAfter(pub.sendMessage('size_changed', size=_size))

def on_move(self, event):
    _pos = event.GetPosition()
    pub.sendMessage('pos_changed', pos=_pos)

提前感谢您的帮助/指点

最小演示:

import pubsub.pub as pub
import wx


class UI(wx.Frame):
    def __init__(self, *args, **kwargs):

        # init base class
        super().__init__(*args, **kwargs)

        # bindings
        self.Bind(wx.EVT_MOVE, self.on_move)
        self.Bind(wx.EVT_SIZE, self.on_size)

    def on_size(self, event):
        _size = event.GetSize()
        print('[UI] resized to :', _size)
        # broadcast new size
        pub.sendMessage('size_changed', size=_size)
        # wx.CallAfter(pub.sendMessage, 'size_changed', size=_size)

        # test incorrect formatting of call after...
        # wx.CallAfter(pub.sendMessage('size_changed', size=_size))

    def on_move(self, event):
        _pos = event.GetPosition()
        print('[UI] moved to :', _pos)
        # broadcast new location
        pub.sendMessage('pos_changed', pos=_pos)
        # wx.CallAfter(pub.sendMessage, 'pos_changed', pos=_pos)



class CustomFrame(object):

    def __init__(self, parent=None, _id=wx.ID_ANY, title='test'):

        # listeners - define before the event
        pub.subscribe(self.on_resized, 'size_changed')
        pub.subscribe(self.on_relocated, 'pos_changed')

        self._id = _id
        self._ui = UI(parent=parent, id=_id, title=title)
        self._ui.Show()

    def on_resized(self, size):
        print('[CustomFrame] The new size is :=', size)
        # do something with the new size

    def on_relocated(self, pos):
        print('[CustomFrame] The new location is :=', pos)
        # do something with the new position


if __name__ == '__main__':
    app = wx.App()
    CustomFrame(title='Demo')
    app.MainLoop()
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/136642
文章 [ 1 ]  |  最新文章 3 年前