gpt4 book ai didi

python-2.7 - 如何在任意位置单击 Gtk.Box 时打开网页,尽管其中有 Gtk.LinkBut​​ton 链接?

转载 作者:行者123 更新时间:2023-12-03 16:38:00 26 4
gpt4 key购买 nike

实际上,我喜欢 Gtk.LinkBut​​ton 的风格,我想用它在我的程序中制作一个广告横幅。下面的标签将是链接目的地的单段描述。但是在横幅上的任何位置都可以单击鼠标打开链接。

这是我试过的。当我单击 Gtk.LinkBut​​ton 时,两个 URI 都会打开。当我点击窗口的其他地方时,没有任何反应。

example.py:

# coding=utf-8

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

b = Gtk.Builder()
b.add_from_file("test.glade")

w = b.get_object("window1")


def box_clicked(widget, event, user_data=None):
del widget, event, user_data

Gtk.show_uri_on_window(w, "http://lumea-lui-silviu.blogspot.ro",
Gdk.CURRENT_TIME)


linkButton = b.get_object("linkButton")
box = b.get_object("box1")
box.connect("button-release-event", box_clicked)

w.connect("delete-event", Gtk.main_quit)
w.show_all()
Gtk.main()

test.glade:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLinkButton" id="linkButton">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="relief">none</property>
<property name="uri">http://www.google.com</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="multilineLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">this
is
a
multiline
label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

截图:

Screenshot

目前,我研究并尝试了描述的一些技术 here , 但我希望有人能更早更快地帮助我。

最佳答案

一个简单的解决方案是将盒子容器包装在 Gtk.EventBox 中。这可以在 Glade 中轻松完成,方法是右键单击框容器并选择添加父项,然后选择事件框,如下图所示(注意:小部件树已经添加了事件框,应该是添加事件框的结果):

Glade add parent

然后,例如,在代码中,box 应该是接收按钮释放事件信号的事件框,并且处理程序可以从 user_data 接收 LinkBut​​ton 并发出 clicked 信号以模拟按钮点击。

调整代码:

# coding=utf-8

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

b = Gtk.Builder()
b.add_from_file("test.glade")

w = b.get_object("window1")

def box_clicked(widget, event, user_data):
user_data.clicked()
return True

linkButton = b.get_object("linkButton")
box = b.get_object("eventbox1")
box.connect("button-release-event", box_clicked, linkButton)

w.connect("delete-event", Gtk.main_quit)
w.show_all()
Gtk.main()

关于python-2.7 - 如何在任意位置单击 Gtk.Box 时打开网页,尽管其中有 Gtk.LinkBut​​ton 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45819462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com