首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gtk3+如何将Gtk.Entry边框更改为颜色?

Gtk3+如何将Gtk.Entry边框更改为颜色?
EN

Stack Overflow用户
提问于 2017-10-13 15:32:59
回答 1查看 3.7K关注 0票数 1

我有一个Gtk.Entry,每当用户输入无效值时,我希望将其边框更改为红色。我正在使用Gtk+3和Python3。对此有什么意见吗?我已经看到"Gtk.Entry.set_inner_border()“对于gtk+ > 3.4是不可取的。

EDIT1:

似乎我的Gtk版本或我的操作系统根本不喜欢颜色!我还有这2行代码,我的按钮没有任何颜色:

代码语言:javascript
复制
    button1.get_style_context().add_class('suggested-action')
    button2.get_style_context().add_class(Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION)

我的Gtk+3版本是3.18。我想这就是原因吧?您建议我升级或使用小部件set_color函数吗?

我将调查,在最坏的情况下,我可能会使用Gtk.Widget.set_background_color,我测试和工作良好,即使它不影响颜色的边框,但背景的文本。现在我应该弄清楚如何自动选择文本呵呵。

无论如何,非常感谢何塞。

EDIT2:

不显示以下线条的颜色:

代码语言:javascript
复制
    b_add.get_style_context().add_class('suggested-action')
    b_remove.get_style_context().add_class(Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION)

EN

Stack Overflow用户

回答已采纳

发布于 2017-10-14 11:32:08

Gtk+ 3.x使用CSS来样式和主题小部件。CSS结构--样式类--确实从3.0变为3.26。这意味着知道您正在使用的版本很重要。

使用Gtk+ 3.22,您可以使用css:

代码语言:javascript
复制
entry { 
    border-color: Red;
}

在Gtk+ 3.18中使用:

代码语言:javascript
复制
.entry {
    border-color: Red;
}

将这个css代码复制到一个名为test.css的文件中,然后从python gt3教程中使用这个经过调整的示例

代码语言:javascript
复制
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GObject

class EntryWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Entry Demo")
        self.set_size_request(200, 100)

        self.timeout_id = None

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(vbox)

        self.entry = Gtk.Entry()
        self.entry.set_text("Hello World")
        vbox.pack_start(self.entry, True, True, 0)

        hbox = Gtk.Box(spacing=6)
        vbox.pack_start(hbox, True, True, 0)

        self.check_editable = Gtk.CheckButton("Editable")
        self.check_editable.connect("toggled", self.on_editable_toggled)
        self.check_editable.set_active(True)
        hbox.pack_start(self.check_editable, True, True, 0)

        self.check_visible = Gtk.CheckButton("Visible")
        self.check_visible.connect("toggled", self.on_visible_toggled)
        self.check_visible.set_active(True)
        hbox.pack_start(self.check_visible, True, True, 0)

        self.pulse = Gtk.CheckButton("Pulse")
        self.pulse.connect("toggled", self.on_pulse_toggled)
        self.pulse.set_active(False)
        hbox.pack_start(self.pulse, True, True, 0)

        self.icon = Gtk.CheckButton("Icon")
        self.icon.connect("toggled", self.on_icon_toggled)
        self.icon.set_active(False)
        hbox.pack_start(self.icon, True, True, 0)

    def on_editable_toggled(self, button):
        value = button.get_active()
        self.entry.set_editable(value)

    def on_visible_toggled(self, button):
        value = button.get_active()
        self.entry.set_visibility(value)

    def on_pulse_toggled(self, button):
        if button.get_active():
            self.entry.set_progress_pulse_step(0.2)
            # Call self.do_pulse every 100 ms
            self.timeout_id = GObject.timeout_add(100, self.do_pulse, None)
        else:
            # Don't call self.do_pulse anymore
            GObject.source_remove(self.timeout_id)
            self.timeout_id = None
            self.entry.set_progress_pulse_step(0)

    def do_pulse(self, user_data):
        self.entry.progress_pulse()
        return True

    def on_icon_toggled(self, button):
        if button.get_active():
            icon_name = "system-search-symbolic"
        else:
            icon_name = None
        self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY,
            icon_name)

win = EntryWindow()
style_provider = Gtk.CssProvider()
style_provider.load_from_path("test.css")

Gtk.StyleContext.add_provider_for_screen(
    Gdk.Screen.get_default(),
    style_provider,
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

其结果应与此类似:

编辑:

关于Fedora 23 (Gtk+ 3.18.9)的结果:

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46733352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档