2017-07-30 4 views
0

最近pygtk/PyGObjectの使用を開始し、ここでQAの1つから得られた次のコード行を使用して背景色や単純なボタンなどのウィジェットを適用または変更しようとしています。PyGObject GTK3ウィジェットの色が機能しない

self.button.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0.0, 1.0, 0.0, 1.0)) 

しかし、それは当てはまりません。

サンプルプログラム全体がここにあります。

#!/usr/bin/env python 
import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk, Gdk 


class MyWIndow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self) 

     self.button = Gtk.Button(label="Click") 
     self.button.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0.0, 1.0, 0.0, 1.0)) 
     self.button.connect("clicked", self.on_button_clicked) 
     self.add(self.button) 

    def on_button_clicked(self, widget): 
     Gtk.main_quit() 


win = MyWIndow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

紛失しているものはありますか? ありがとうございます。

答えて

1

このメソッドはGtkの+ 2.0で使用し、それはまたのGtk + 3.0の最初のバージョンで使用されていたようだが、それは、バージョン3.16では非推奨にした:バージョン3.0に

新:Python APIから

バージョン3.16から廃止されました:この機能は、CSSベースのレンダリングのコンテキストでは役に立ちません。 ウィジェットの背景をレンダリングする方法を変更する場合は、 アプリケーション固有のGtk.StyleProviderとCSSスタイルクラスを使用してカスタムCSSスタイルを使用する必要があります。 は、Gtk.Widget :: drawシグナルを使ってウィジェットのデフォルトの描画を上書きすることもでき、 のCSSスタイルにかかわらず、Cairoを使用して特定の色を描画することができます。

さらに詳しい情報はMigration to CSSです。

事前に定義されたCSSクラスを使用してあなたの例では、(提案および破壊アクション):

#!/usr/bin/env python 
import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk, Gdk 


class MyWIndow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self) 

     self.button = Gtk.Button(label="Click") 
     self.button.get_style_context().add_class("suggested-action") 
     self.button.connect("clicked", self.on_button_clicked) 
     self.add(self.button) 

    def on_button_clicked(self, widget): 
     self.button.get_style_context().add_class("destructive-action") 


win = MyWIndow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 
関連する問題