Python PyGTK自定义组合框行为
我正在尝试创建一个自定义组合框,其行为类似于此处的组合框: 我现在有两个问题: 我似乎找不到一个办法在旁边有一个滚动条;gtk.rc_parse_string函数应该做到这一点,因为ComboBox小部件有一个“显示为列表”样式的属性,但是我的自定义小部件由于某种原因似乎不受影响 当您从my widget中选择一种颜色,然后再次单击组合框,而不是显示所选项目及其相邻项目时,滚动窗口从顶部开始,没有明显的原因 这是代码,您几乎可以忽略uu加载u名称u调色板方法。您需要/usr/share/X11/rgb.txt文件来运行此代码,它如下所示: 问题是自我表现。此外,您不能有列表和换行宽度!=一,Python PyGTK自定义组合框行为,python,list,combobox,coding-style,gtk,Python,List,Combobox,Coding Style,Gtk,我正在尝试创建一个自定义组合框,其行为类似于此处的组合框: 我现在有两个问题: 我似乎找不到一个办法在旁边有一个滚动条;gtk.rc_parse_string函数应该做到这一点,因为ComboBox小部件有一个“显示为列表”样式的属性,但是我的自定义小部件由于某种原因似乎不受影响 当您从my widget中选择一种颜色,然后再次单击组合框,而不是显示所选项目及其相邻项目时,滚动窗口从顶部开始,没有明显的原因 这是代码,您几乎可以忽略uu加载u名称u调色板方法。您需要/usr/share/X11/
import gtk
import gobject
from os.path import exists
def window_delete_event(*args):
return False
def window_destroy(*args):
gtk.main_quit()
class ColorName(gtk.ComboBox):
colors = []
def __init__(self, name_palette_path, wrap_width=1):
gtk.ComboBox.__init__(self)
liststore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING,
gobject.TYPE_STRING)
name_palette = self.__load_name_palette(name_palette_path)
for c in name_palette:
r, g, b, name = c
if ((r + g + b) / 3.) < 128.:
fg = '#DDDDDD'
else:
fg = '#222222'
bg = "#%02X%02X%02X" % (r, g, b)
liststore.append((name, bg, fg))
self.set_model(liststore)
label = gtk.CellRendererText()
self.pack_start(label, True)
self.set_attributes(label, background=1, foreground=2, text=0)
self.set_wrap_width(wrap_width)
if len(name_palette) > 0:
self.set_active(0)
self.show_all()
def __load_name_palette(self, name_palette_path):
if exists(name_palette_path):
try:
f = open(name_palette_path,'r')
self.colors = []
palette = set()
for l in f:
foo = l.rstrip().split(None,3)
try:
rgb = [int(x) for x in foo[:3]]
name, = foo[3:]
except:
continue
k = ':'.join(foo[:3])
if k not in palette:
palette.add(k)
self.colors.append(rgb + [name])
f.close()
return self.colors
except IOError as (errno, strerror):
print "error: failed to open {0}: {1}".format(name_palette_path, strerror)
return []
else:
return []
if __name__ == '__main__':
win = gtk.Window()
#colname = ColorName('./ntc.txt')
colname = ColorName('/usr/share/X11/rgb.txt')
gtk.rc_parse_string("""style "mystyle" { GtkComboBox::appears-as-list = 1 }
class "GtkComboBox" style "mystyle" """)
print 'appears-as-list:', colname.style_get_property('appears-as-list')
model = gtk.ListStore(gobject.TYPE_STRING)
hbox = gtk.HBox()
win.add(hbox)
hbox.pack_start(colname)
win.connect('delete-event', window_delete_event)
win.connect('destroy', window_destroy)
win.show_all()
gtk.main()