Van*_*dez 4 css python gtk styles gtk3
请原谅我的英语.
我正在尝试使用css文件更改GtkButton的背景颜色,但我不能.我尝试了一些我在网上找到的例子,但都没有用.我发布了两个例子.一个在Python 3.2.3中,另一个在C中我使用的是Gtk + 3.6和Kubuntu 12.10.
这是其中一个的代码:
from gi.repository import Gtk, Gdk
class MainWindow(Gtk.Window):
def __init__(self):
super().__init__()
vbox = Gtk.Box(spacing=10,orientation=Gtk.Orientation.VERTICAL)
self.add(vbox)
self.entries = [ Gtk.Entry() for i in range(3) ]
for e in self.entries:
vbox.pack_start(e, True, True, 0)
e.connect("changed", self.on_entry_changed)
e.set_text('123')
button=Gtk.Button(label='ok')
vbox.pack_end(button,True,True,0)
def on_entry_changed(self,entry):
ctx = entry.get_style_context()
if not entry.get_text().isnumeric():
ctx.add_class('invalid')
else:
ctx.remove_class('invalid')
cssProvider = Gtk.CssProvider()
cssProvider.load_from_path('style.css')
screen = Gdk.Screen.get_default()
styleContext = Gtk.StyleContext()
styleContext.add_provider_for_screen(screen, cssProvider,
Gtk.STYLE_PROVIDER_PRIORITY_USER) # With the others GTK_STYLE_PROVIDER_PRIORITY values get the same result.
window = MainWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)
和style.css
GtkEntry.invalid {
background-color: #ffaaaa;
background: #ffaaaa;
}
GtkButton {
engine: oxygen-gtk; /*tried also with 'none' and without setting engine*/
background-color: green;
background: green;
}
Run Code Online (Sandbox Code Playgroud)
条目运作良好... bg颜色变化.但按钮没有,并且没有错误消息.
编辑3 :(删除预览编辑和更改一些标签) 总结...我试图用我在网络上找到的所有Python,C和C++代码更改按钮颜色失败.我阅读了我找到的所有教程和GTK + 3参考手册.之后我所知道的是问题是关于Kubuntu主题:如果我将GTK主题从'oxygen-gtk'更改为'default'(在GTK配置中),是我发现代码运行良好的唯一方法,但是这不是主意,按钮看起来很可怕.
所以,问题是:
谢谢和问候!
我知道这已经很老了,但是在前几个谷歌搜索结果中出现了,所以我想我会分享我的经验.
Gtk.Button有一个内联的Gtk.Label用于按钮文本,默认情况下不会从按钮继承,所以你必须明确告诉它(或只是指定其中的颜色):
GtkButton GtkLabel {
color: #fff; /* This changes the text color in the button */
}
Run Code Online (Sandbox Code Playgroud)
至于@sciamp的答案,GTK主题也为背景和边框设置了一个图像,所以你必须手动删除background-image: none; border-image: none;希望,这可以节省一些人的斗争.
这很复杂,但我认为不能直接完成。
我认为核心原因是按钮没有渲染背景。它所做的只是在其区域周围渲染一个框架,然后渲染内部的所有子项。请记住,GtkButton 是一个容器,它通常包含用于文本标签的 GtkLabel,但可以包含任何小部件。
我已经设法更改文本标签的背景颜色,但只有文本本身周围更紧密的框受到影响,这不是您想要的。
间接的解决方案是对 GtkButton 进行子类化以创建一个实际上渲染其背景的变体。可以肯定的是,这对主题来说非常粗鲁,应该避免。
| 归档时间: |
|
| 查看次数: |
4391 次 |
| 最近记录: |