在 Python 中更改 Gtk Toglebutton 的背景颜色

问题描述 投票:0回答:1

几天来我一直在寻找有关如何在 Python/Gtk 3 中更改小部件颜色的信息,但没有找到太多信息。我特别想做的是在 CSS 中更改 ToggleButtons 的颜色。 Gtk 文档对我没有帮助,因为我不了解 C.

我试图理解以下代码:在 GTK3(C 语言)中按下时更改 Toglebutton 的背景颜色,并将其更改为 Python,如下所示,但按钮颜色没有改变。有人可以告诉我是否有一个很好的资源供 Python 程序员使用 CSS 编写 Gtk 程序,或者有人可以指出正确的方向来更改下面的代码以使其工作吗?提前谢谢你。

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

class btn:
    def __init__(self):
# From https://stackoverflow.com/questions/41796529/
        styleProvider=Gtk.CssProvider()
        css = b"""
GtkWindow {
    background-color: #A4A4A4;
    color: cyan;
    border-width: 3px;
    border-color: blue;
}

#myGrid {
    background-color: white;
    border-style: solid;
    border-width: 3px;
    border-radius: 15px;
    border-color: grey;
}

#myChild {
    background-color: red;
    border-style: solid;
    border-width: 3px;
    border-radius: 15px;
    border-color: grey;
}

#tgl_btn{
    background-color: red;
    color: red;
}


GtkButton {
    background-image: none;
    background-color: blue;
}

GtkButton:active {
    background-color: #00FF00;
}
"""
        styleProvider.load_from_data(css)
        Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),styleProvider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        self.window = Gtk.Window()
        self.btn = Gtk.ToggleButton(label = 'tgl_btn')
        self.window.add(self.btn)
        self.window.show_all()

    def main(self):
        Gtk.main()

p=btn()
p.main()
python css gtk togglebutton
1个回答
0
投票

要使用 CSS 在 Python/Gtk 中更改

ToggleButton
的颜色,您可以按照以下步骤操作:

  • 创建一个
    Gtk.CssProvider()
    对象来存储您的 CSS 代码。
  • 使用
    Gtk.StyleContext.add_provider_for_screen()
    方法将 CSS 提供程序添加到应用程序的屏幕。
  • 通过使用其小部件名称后跟要更改的 CSS 属性,为 ToggleButton 定义 CSS 样式。

这里有一个示例代码片段,演示了如何更改

ToggleButton
的颜色:

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

class btn:
    def __init__(self):
        window = Gtk.Window()
        window.connect("destroy", Gtk.main_quit)
        
        # Create a Gtk.Grid widget
        grid = Gtk.Grid()
        window.add(grid)
        
        # Create a Gtk.ToggleButton widget and add it to the grid
        toggle_button = Gtk.ToggleButton("Toggle Button")
        toggle_button.set_name("my_toggle_button")
        grid.attach(toggle_button, 0, 0, 1, 1)
        
        # Define the CSS style for the ToggleButton
        css_provider = Gtk.CssProvider()
        css_provider.load_from_data(b"""
            #my_toggle_button {
                background-color: red;
            }
        """)
        Gtk.StyleContext.add_provider_for_screen(
            Gdk.Screen.get_default(),
            css_provider,
            Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
        )
        
        window.show_all()

if __name__ == "__main__":
    btn()
    Gtk.main()

在这个例子中,我们创建了一个

Gtk.ToggleButton()
小部件并将它添加到一个
Gtk.Grid()
容器中。我们使用
ToggleButton
方法将
"my_toggle_button"
的名称设置为
set_name()
。然后,我们使用小部件名称和
ToggleButton
属性为
"background-color"
定义一个 CSS 样式。

最后,我们创建一个

Gtk.CssProvider()
对象来存储CSS代码,并使用
load_from_data()
方法加载它。我们使用
Gtk.StyleContext.add_provider_for_screen()
方法将 CSS 提供程序添加到应用程序的屏幕,优先级为
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
。这确保了 CSS 样式将应用于我们应用程序中的小部件。

© www.soinside.com 2019 - 2024. All rights reserved.