首页 > 其他分享 >2、remi--ButtonLay.py

2、remi--ButtonLay.py

时间:2024-02-22 18:23:09浏览次数:27  
标签:__ loading -- self EVENT remi ButtonLay event

上一篇末尾测试了一个用例,使用了四个组件:一个主容器和三个那啥;那么从这篇开始就尽量按照官方文档的顺序来进行测试了。

 

先看:remi.gui.BODY源码,此处链接中的代码与下面所示实际安装好的库中源码的单词个别有所区别,但不影响观看 >,>

remi.gui.BODY()源码
class BODY(Container):
    EVENT_ONLOAD = 'onload'
    EVENT_ONERROR = 'onerror'
    EVENT_ONONLINE = 'ononline'
    EVENT_ONPAGEHIDE = 'onpagehide'
    EVENT_ONPAGESHOW = 'onpageshow'
    EVENT_ONRESIZE = 'onresize'

    def __init__(self, *args, **kwargs):
        super(BODY, self).__init__(*args, _type='body', **kwargs)
        loading_anim = Widget()
        loading_anim.css_margin = None
        loading_anim.identifier = "loading-animation"
        loading_container = Container(children=[loading_anim], style={'display':'none'})
        loading_container.css_margin = None
        loading_container.identifier = "loading"

        self.append(loading_container)

    @decorate_set_on_listener("(self, emitter)")
    @decorate_event_js("""remi.sendCallback('%(emitter_identifier)s','%(event_name)s');""")
    def onl oad(self):
        """Called when page gets loaded."""
        return ()

    @decorate_set_on_listener("(self, emitter)")
    @decorate_event_js("""remi.sendCallback('%(emitter_identifier)s','%(event_name)s');""")
    def ononline(self):
        return ()

    @decorate_set_on_listener("(self, emitter)")
    @decorate_event_js("""remi.sendCallback('%(emitter_identifier)s','%(event_name)s');""")
    def onpagehide(self):
        return ()

    @decorate_set_on_listener("(self, emitter)")
    @decorate_event_js("""
            var params={};
            params['width']=window.innerWidth;
            params['height']=window.innerHeight;
            remi.sendCallbackParam('%(emitter_identifier)s','%(event_name)s',params);""")
    def onpageshow(self, width, height):
        return (width, height)

    @decorate_set_on_listener("(self, emitter)")
    @decorate_event_js("""
            var params={};
            params['width']=window.innerWidth;
            params['height']=window.innerHeight;
            remi.sendCallbackParam('%(emitter_identifier)s','%(event_name)s',params);""")
    def onresize(self, width, height):
        return (width, height)

 

如源码所示:

  BODY类中有如下几个事件监听器,这里直接复制赋值对象(分别对应一中事件场景)进行注释了:

    EVENT_ONLOAD = 'onload'     # 当页面加载时调用
    EVENT_ONERROR = 'onerror'     # 当发生错误时调用
    EVENT_ONONLINE = 'ononline'     # 当网络连接时调用
    EVENT_ONPAGEHIDE = 'onpagehide'     # 当页面隐藏时调用
    EVENT_ONPAGESHOW = 'onpageshow'     # 当页面显示时调用
    EVENT_ONRESIZE = 'onresize'     # 当窗口大小改变时调用

 总之就是,你不用管它,当你设计的漂亮ui在发生任何事件的时候,上面个的情况总有能对的上的,它会自动调用;

 

来一趟当然不能”白跑“啊!!!  那就继续文档的下一个类:

 

remi.gui.Button

remi.gui.Button安装包源码
 class Button(Widget, _MixinTextualWidget):
    """The Button widget. Have to be used in conjunction with its event onclick.
        Use Widget.onclick.connect in order to register the listener.
    """
    def __init__(self, text='', *args, **kwargs):
        """
        Args:
            text (str): The text that will be displayed on the button.
            kwargs: See Widget.__init__()
        """
        super(Button, self).__init__(*args, **kwargs)
        self.type = 'button'
        self.set_text(text)

 

Button组件测试:

buttonLab.py
 import remi.gui as gui
from remi import start, App


class MyApp(App):
    def __init__(self, *args):
        super(MyApp, self).__init__(*args)

    def main(self):
        # 创建一个主容器(VBox)
        self.container = gui.VBox(width='100%', height='100%', style={'margin': 'auto', 'padding': '10px'})
        # 创建按钮,并绑定点击事件
        self.btn = gui.Button("You Cant!")
        self.btn.onclick.do(self.button_event)

        self.container.append(self.btn)
        return self.container
    
    # 定义按钮点击事件
    def button_event(self, widget):   # 使用pycharm的,这里widget是灰色的,你可以改成anyword,但是千万不要觉得它用不上给删掉了哈,你会后悔的!!!
        self.btn.set_text("I have been clicked!")


if __name__ == "__main__":
    start(MyApp, debug=True, address='127.0.0.1', port=8085, start_browser=True, username=None, password=None)

 

标签:__,loading,--,self,EVENT,remi,ButtonLay,event
From: https://www.cnblogs.com/gaogaoing/p/18027724

相关文章

  • golang中的类型断言,解释.(float64)和.(string)
    在Go语言中,. 后跟括号中的类型名称(如 .(float64) 或 .(string))通常出现在类型断言(typeassertion)的上下文中。类型断言用于检查一个空接口(interface{})值是否包含特定的类型,如果是,则将其转换为该类型。类型断言的语法如下:value,ok:=x.(T)其中 x 是一个 interface{}......
  • 推荐两个网络复用相关的 Go pkg: cmux smux
    推荐两个网络复用相关的Gopkg:cmux/smux只写一下如何使用,不对实现进行大量描述,两个库的代码都比较精炼,花一会看一下就行。cmux对端口进行复用,单端口可以建立不同协议的连接(本质都是TCP),如TCP/TLS/HTTP/gRPC或自定义协议smux对TCP连接复用,单TCP连接承载多条smuxstream......
  • 玉蟾宫 题解
    题目描述有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。这片土地被分成N*M个格子,每个格子里写着’R’或者’F’,R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。现在freda要在这里卖萌。。。它要找一块......
  • 基于STM32F407MAC与DP83848实现以太网通讯二(DP83848硬件配置以及寄存器)
    参考内容:DP83848数据表一、PHYDP83848功能模块图                     DP83848的硬件模块主要为:MII/RMII/SNI INTERFACES:用于与MAC数据传输的MII/RMII/SNI接口Transmit BLOCK:数据发送模块,将从外部MAC(例如STM32ETH外设的MAC)接收......
  • 29.Jenkins Api 接口
    JenkinsApi简介Jenkins对外暴露的动作交付入口为外部程序提供入口,可以控制Jenkins支持协议-HttpApi接口支持用户名、密码认证JenkinsApi支持的典型功能:运行Job、查看任务状态、返回任务编号…等JenkinsApi环境准备使用curl调用获取所有Jobs接口创建一......
  • Blocks
    题目描述给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1。经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k。总共给出M次询问,每次询问给出......
  • Salesforce顾问如何拿到更高的薪水?
    顾问的角色已经在Salesforce生态系统存在了一段时间,随着Salesforce针对职业发展的Trailhead培训模块的发布,该角色的热度又达到了新的浪潮。越来越多人走上了Salesforce顾问这条职业道路。当然其薪资水平也非常可观,据调查,美国的Salesforce顾问会在3-5年内达到六位数的薪水,这在很......
  • 飞腾麒麟系统网络不自动链接
    一 mii-tool-vw mii-tool-vw 是一个在Linux系统中查询以太网卡物理层连接和工作模式的命令。具体解释如下:mii-tool 是一个用于管理和查询以太网控制器MII(MediaIndependentInterface)接口的命令行工具,它可以显示网卡的链路状态(是否连接)以及工作模式(......
  • redis
    缓存击穿”通俗的解释就是某个热点数据,某一时刻在缓存中失效,进而大量的请求打到数据库上,就像被击穿了一样。说白了就是某个数据,数据库中有,缓存中没有,一瞬间大量该key的请求打到数据库上,导致数据库被打垮。最常见的场景就是秒杀商品。什么是缓存穿透呢?举个简单栗子,作者开发了一个......
  • Feb 22
    快开学了,我好害怕。不是因为寒假没好好学,是因为想想现在的503的氛围就感觉压抑(因为我是个崇尚闲适和自由的人,也可能因为我这个人本身就不是很合群)。我还甚至为此考虑要不要去普通班呆着,已经做好玩一个学期的准备了。话说滚回来已经有三个月了,再有三个月高二就没了,谁知道高三能......