2016-01-22 13 views
7

Tôi đang cố gắng thay đổi màu đánh dấu cho một số gtk.EventBox. Nó có một màu nền nhất định, và tôi muốn vẽ một đường xung quanh nó với màu bổ sung của nó. Tôi đã tìm thấy drag_highlight, vẽ một đường xung quanh tiện ích, nhưng tôi đã không tìm ra cách thay đổi màu sắc: nó luôn luôn đen. Bất kỳ ý tưởng?Màu Pygtk cho drag_highlight

+0

có thể bạn sẽ cần phải viết mã riêng của bạn cho việc này. Trong tài liệu cho 'drag_highlight' đề cập đến nó kết nối với bộ xử lý' expose_event' và 'draw' vì vậy nếu bạn làm như vậy và sau đó cập nhật kiểu (hoặc đường viền) khi những sự kiện này xảy ra. – B8vrede

Trả lời

4

Để thực hiện các dòng xung quanh EventBox, người ta có thể đặt nó vào Frame hoặc EventBox khác (trong trường hợp này chúng ta có thể thiết lập độ rộng của "border"), đây là cách có vẻ:

enter image description here

Và đây là mã (nó là một modified EventBox example):

#!/usr/bin/env python 

# example eventbox.py 

import pygtk 
pygtk.require('2.0') 
import gtk 

class EventBoxExample: 
    def __init__(self): 
     window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     window.set_title("Event Box") 
     window.connect("destroy", lambda w: gtk.main_quit()) 
     window.set_border_width(10) 

     # Create an EventBox and add it to our toplevel window 
     frame = gtk.EventBox() # gtk.Frame() 
     window.add(frame) 
     frame.show() 
     frame.set_border_width(2) 
     frame.modify_bg(gtk.STATE_NORMAL, 
          frame.get_colormap().alloc_color("blue")) 

     event_box = gtk.EventBox() 
     frame.add(event_box) 
     event_box.set_border_width(10) 
     event_box.show() 

     # Create a long label 
     label = gtk.Label("Click here to quit, quit, quit, quit, quit") 
     event_box.add(label) 
     label.show() 

     # Clip it short. 
     label.set_size_request(110, 20) 

     # And bind an action to it 
     event_box.set_events(gtk.gdk.BUTTON_PRESS_MASK) 
     event_box.connect("button_press_event", lambda w,e: gtk.main_quit()) 

     # More things you need an X window for ... 
     event_box.realize() 
     event_box.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1)) 

     # Set background color to green 
     event_box.modify_bg(gtk.STATE_NORMAL, 
          event_box.get_colormap().alloc_color("green")) 

     window.show() 

def main(): 
    gtk.main() 
    return 0 

if __name__ == "__main__": 
    EventBoxExample() 
    main() 
+1

Điều này làm việc tuyệt vời, nhưng tôi sẽ không giải thưởng tiền thưởng được nêu ra bởi vì tôi muốn nhận được một câu trả lời mà không yêu cầu cha mẹ khác cho EventBox. Tôi chấp nhận câu trả lời của bạn bây giờ để tôi không nhất thiết phải nhớ để trao cho bạn tiền thưởng khi hết hạn. – zondo

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