2011-02-09 42 views
6

Đối với mỗi hàng trong ảnh treeview của tôi, tôi muốn 4 nút hình ảnh cạnh nhau. Chúng sẽ hoạt động giống như các nút radio, chỉ có một nút được kích hoạt tại một thời điểm. Mỗi nút có hình ảnh 'bật' và 'tắt'.gtk treeview: đặt các nút hình ảnh trên các hàng

Làm cách nào để thực hiện việc này? Tôi đã tìm ra cách để đặt hình ảnh ở đó, và làm thế nào để đặt các nút bấm, nhưng điều này dường như đòi hỏi một số nỗ lực nhiều hơn vì không có cellrenderer dựng sẵn mà làm những gì tôi muốn.

Về cơ bản những gì sẽ giải quyết được vấn đề của tôi là tìm ra cách tạo một hình ảnh ở dạng có thể nhấp gtk.treeview. bất kỳ ý tưởng?

Trả lời

1

Hãy xem số điện thoại 'http://www.daa.com.au/pipermail/pygtk/2010-March/018355.html ' này. Nó cho bạn thấy cách làm cho một gtk.CellRendererPixbuf có thể kích hoạt và có thể kết nối với tín hiệu sự kiện nhấp chuột.

cell = CellRendererPixbufXt() 
cell.connect('clicked', func) 

Cập nhật

Như đã chỉ ra câu trả lời này, hoặc các tài liệu tham khảo cho không hoạt động như quảng cáo. Thiếu phương thức do_activate, cần phát ra tín hiệu được nhấp. Khi nó được thực hiện, thì cell.connect sẽ hoạt động.

Xin lỗi nếu câu trả lời này đánh lừa bất kỳ ai.

+0

Thực ra, tham chiếu của bạn không hiển thị ... – schlamar

+0

Tôi không biết bạn đang xem gì ngoài tham chiếu của tôi. Tôi nhận thấy câu trả lời của bạn có khá nhiều điều tương tự như tài liệu tham khảo mà tôi đã đưa ra. Nếu bạn đang phàn nàn về điều gì đó khác, xin vui lòng rõ ràng hơn một chút –

+0

Tín hiệu 'nhấp chuột' sẽ không bao giờ được kích hoạt. Trên thực tế, đây không phải là một bất ngờ lớn nếu tôi trích dẫn từ tài liệu tham khảo của bạn: "nhưng tôi không chắc chắn cách phát ra tín hiệu" được nhấp "tùy chỉnh, khi người dùng nhấp vào trên Trình tạo ô." – schlamar

0

Đây là những gì làm việc cho tôi:

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 
    gsignal('clicked', str) 
    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 
    def do_activate(self, event, widget, path, background_area, cell_area, flags): 
     self.emit('clicked', path) 
+0

Tôi giả sử bạn tham khảo 'kiwi.utils.gsignal'? – schlamar

2

Đây là một phiên bản ngắn mà không kiwi yêu cầu.

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 

    __gsignals__ = {'clicked': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, 
           (gobject.TYPE_STRING,)) 
        } 

    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 

    def do_activate(self, event, widget, path, background_area, cell_area, 
        flags): 
     self.emit('clicked', path) 
+0

Tôi đang cố sử dụng mã của bạn nhưng tôi nhận được đối tượng 'gi.repository.Gtk 'không có thuộc tính' CELL_RENDERER_MODE_ACTIVATABLE'' - bất kỳ ý tưởng nào tại sao? –

+0

Có, mã của tôi là dành cho (Py) Gtk 2. – schlamar

Các vấn đề liên quan