【问题标题】:Kivy Label Markup link changeKivy 标签标记链接更改
【发布时间】:2015-01-09 06:21:06
【问题描述】:

我一直在研究使用标记在标签中创建链接,我已经这样做了,但想知道是否有办法更改链接指向的 url

如果我有

Label:
    id: sLinksLabel
    text: 'Load Up [ref=some]some_link[/ref]'
    text_size: self.width, None
    size_hint_y: None
    pos_hint:{'center_x':0.5, 'y': 0.20}
    size: (150, 44)
    markup: True
    on_ref_press:
        import webbrowser
        webbrowser.open("somelink.com")

当标签中的文本更改为链接时,是否可以更改该链接?

即如果标签文本发生变化,例如

self.root.sLinks.text = '[ref=some]some_other_link[/ref]'

我也想过调用类似的过程

def loadlink(self, *args):
    if sLinks.text == 'Load Up [ref=some]website[/ref]': #check if nothing has changed load default page
        import webbrowser
        webbrowser.open("some_link")
    else: #text has been changed load new link
        link = self.root.sLinks.text #get link from label text
        import webbrowser
        webbrowser.open(some_other_link)

并将 on_ref_press 更改为

        on_ref_press:
        loadlink()

但它说 loadlink 没有定义... grrrr

提前致谢

【问题讨论】:

    标签: python-3.x dynamic hyperlink label kivy


    【解决方案1】:

    on_ref_press 为您提供参考 ID 为 args[1],因此您可以使用它:

    Label:
        id: sLinksLabel
        text: 'Load Up [ref=http://google.com]some_link[/ref]'
        text_size: self.width, None
        size_hint_y: None
        pos_hint:{'center_x':0.5, 'y': 0.20}
        size: (150, 44)
        markup: True
        on_ref_press:
            import webbrowser
            webbrowser.open(args[1])
    

    【讨论】:

    • 谢谢,我想我明白了,所以创建多个 refs 和 args 帮助您选择特定的?那正确吗?!如果是这样,我不能真正使用它,因为我得到的链接会发生变化,所以我实际上可以拥有无​​限数量的链接。我正在查看新闻文章并显示网址,然后当他们被点击时我想打开它......
    • 您在问题中表示您将在其他地方更改文本。如果你更改Label中的文字,那么你可以轻松地同时更改ref id。
    • 听起来不错!但我找不到在构建器加载字符串中引用标签文本的方法,([ref=self.root.sLinks.text] Link [/ref]) 我找不到 arg[1] 引用文本的文档在标签内,您能否指出我正确的方向重新文档或举个例子?我已经尝试kivy.org/docs/api-kivy.uix.label.html 并在其中搜索 args[1],但可以找到任何可以向我虚弱的大脑解释的东西!
    • 假设 kv 是您应用的 kv 文件的摘录,并且此 Label 是根小部件规则的一部分,那么您可以使用 App 类中的 self.root.ids.sLinksLabel.text = '...' 或其他地方的 App.get_running_app().root.ids.sLinksLabel.text = '...'。至于args - 每个事件都有参数。第一个参数始终是EventDispatcher 实例(即Widget),其余参数因事件而异。 on_ref_press 事件总共发送两个参数:Label 实例 (args[0]) 和引用 id (args[1])。
    • 抱歉回复晚了,我病了。谢谢你一直陪着我!不知道我是否理解或我是否已经说清楚了。当您在 kv 构建字符串中设置标签时,我可以使用上面的代码轻松地从那里调用主网页。但是,我想根据关键字(即达特茅斯)显示文章的 url,因此每天都会生成一个新的 url。我在标签中显示了 url,但标记已从构建字符串中创建的原始实例中消失。有没有办法,当我在标签中显示字符串以重做新 url on_press 的标记引用时?
    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2020-12-05
    相关资源
    最近更新 更多