在我的應用程序中,我有大約500個按鈕,當採取特定操作時,它們都會更新它們的標籤和顏色。我也陷入了崩潰,當我發現性能問題(通過使用CPROFILE和PDB),這個問題是通過改變按鈕的顏色造成的:如何更改pygtk gtk.Button顏色正確
這樣self.button.modify_bg(gtk.STATE_PRELIGHT, color)
self.button.modify_bg(gtk.STATE_NORMAL, color)
500元話費需要5秒的永恆(也凍結GUI),並且它在應用程序運行時間越長越慢。如果有人想知道,我有一個強大的處理器和大量的可用內存。
此前我試圖按照docs中的建議使用EventBox。然而,這只是改變了按鈕後面的顏色,而不是在其表面:
import gtk
win = gtk.Window()
win.connect("destroy", gtk.main_quit)
btn = gtk.Button("test")
eb = gtk.EventBox()
eb.add(btn)
eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("red"))
win.add(eb)
win.show_all()
gtk.main()
結果:
我也試過這涉及檢索和修改了樣式替代。這導致與modify_bg
相同的緩慢。另外,我隨機出現隨機崩潰的情況,通常會出現低級內存分配錯誤,例如從gtk中釋放兩次。
import gtk
win = gtk.Window()
win.connect("destroy", gtk.main_quit)
btn = gtk.Button("test")
#copy the current style and replace the background
style = btn.get_style().copy()
style.bg[gtk.STATE_NORMAL] = gtk.gdk.color_parse("red")
#set the button's style to the one you created
btn.set_style(style)
win.add(btn)
win.show_all()
gtk.main()
看來,按鈕的顏色是由操作系統管理,我不能找到辦法解決它,而不緩慢,死機或意外的結果。我非常需要通過顏色傳達有關按鈕的重要信息。
那麼如何正確更改按鈕顏色?