2

我想获取我的 textview 的当前背景颜色以更改它并稍后恢复它。

这是我尝试过的:

context = textview.get_style_context()
state = Gtk.StateFlags.NORMAL
color = context.get_background_color(state)

我尝试了所有可能的状态,但没有一个返回正确的背景颜色(在我的情况下为白色)

知道如何得到它吗?

4

1 回答 1

0

在没有看到更多代码的情况下,我不确定您的具体问题是什么,但这里有一个快速示例,它覆盖背景,然后在单击按钮时恢复它:

from gi.repository import Gtk, Gdk
import sys


class MyWindow(Gtk.ApplicationWindow):
    def __init__(self, app):
        Gtk.Window.__init__(self, title="Textview example", application=app)
        self.set_default_size(250, 100)
        self.set_border_width(10)

        self.view = Gtk.TextView()
        self.style_context = self.view.get_style_context()
        self.default_bg_color = self.style_context.get_background_color(Gtk.StateFlags.NORMAL)
        self.view.override_background_color(Gtk.StateFlags.NORMAL,
                                            Gdk.RGBA(0, 0, 0, 1))

        self.btn = Gtk.Button(label="Click Here")
        self.btn.connect("clicked", self.on_btn_clicked)

        box = Gtk.VBox()
        box.pack_start(self.view, True, True, 0)
        box.pack_start(self.btn, False, False, 0)
        self.add(box)

    def on_btn_clicked(self, widget):
        current_bg = self.style_context.get_background_color(Gtk.StateFlags.NORMAL)
        if current_bg == self.default_bg_color:
            self.view.override_background_color(Gtk.StateFlags.NORMAL,
                                                Gdk.RGBA(0, 0, 0, 1))
        else:
            self.view.override_background_color(Gtk.StateFlags.NORMAL, 
                                                self.default_bg_color)


class MyApplication(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(self)

    def do_activate(self):
        win = MyWindow(self)
        win.show_all()

    def do_startup(self):
        Gtk.Application.do_startup(self)

app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
于 2013-08-21T18:09:37.600 回答