2016-05-18 2 views
0

Так что в настоящее время у меня есть Gtk Overlay. Я могу поднять свою кнопку, которую я хотел бы разместить, используя Gtk's Gtk.Align.CENTER, но я так долго пробовал позиционировать кнопку, а не выравнивать ее.Как установить расположение кнопки Gtk в Overlay Gtk

# Overlay 
    self.overlay = Gtk.Overlay() 
    self.overlay.show() 

    # Image 
    image_pixbuf = GdkPixbuf.Pixbuf.new_from_file("pics/sgcity.png") 
    image_pixbuf = image_pixbuf.scale_simple(1200, 720, GdkPixbuf.InterpType.BILINEAR) 
    self.image = Gtk.Image() 
    self.image.set_from_pixbuf(image_pixbuf) 
    self.overlay.add(self.image) 
    self.image.show() 


    # Test overlay button 
    self.printerimg = Gtk.Image() 
    self.printerimg.set_from_file("pics/printer.png") 

    self.testbutton = Gtk.Button(None) 
    self.testbutton.set_image(self.printerimg) 
    #self.testbutton.set_alignment(0.1, 0.9) 
    #self.testbutton.set_property("width-request", 20) 
    #self.testbutton.set_property("height-request", 20) 
    self.testbutton.set_allocation(allocation) 
    self.testbutton.set_valign(Gtk.Align.CENTER) 
    self.testbutton.set_halign(Gtk.Align.CENTER) 
    self.overlay.add_overlay(self.testbutton) 
    self.testbutton.show() 
    self.testbutton.set_name("testbutton") 
    self.testbutton.set_opacity(0.8) 



    #for i in range(len(printer_store)): 
     #self.overlay.connect("get-child-position", self.get_child_position) 
     #self.printbuttons[i].show() 

    #def get_child_position(self, overlay, widget, allocation): 
     #self.child_position_count += 1 
     #for i in range(len(self.logic.get_printer_button_attributes())): 
      #button_attrib = self.logic.get_printer_button_attributes() 
      #allocation.x = button_attrib[i][0] 
      #allocation.y = button_attrib[i][1] 
      #allocation.height = button_attrib[i][2] 
      #allocation.width = button_attrib[i][3] 
     #print "changed" 
     #return True 

Как вы можете видеть по комментируемой линии, я попытался с помощью Gtk.Widget.set_property(), Gtk.Widget.set_alignment() и несколько других вещей. set_alignment() просто устанавливает выравнивание изображения в кнопке по своим параметрам, а не по самой кнопке. Любые указания относительно того, что я должен делать, чтобы установить положение кнопки? В конце концов, у меня будет несколько кнопок в определенных положениях наложения.

ответ

2

The Description section of the GtkOverlay documentation имеет ваш ответ: вы либо используете свойства поля GtkWidget, либо сигнал get-child-position GtkOverlay для установки позиции.

+0

Да, я пробовал, вероятно, 6 часов, просто играя с сигналом 'code'get-child-position signal'code' и до сих пор не работал. Я не уверен, что я делаю неправильно. – TheEggSample

+0

Я создавал обработчик по строкам 'self.overlay.connect (« get-child-position », self.get_child_position)', и я понял, что он посылает мне оверлей и кнопку и прямоугольник Gdk. У меня возникли проблемы с определением того, как на самом деле установить положение из прямоугольника. Я попытался использовать 'set_allocation (modified_gdk_rectangle)', но не получил этого для работы. Я думаю, что я просто смущен тем, как я должен изменить позицию в 'self.get_child_position()' и не могу найти ни одного примера в Интернете. (пожалуйста, извините мое страшное форматирование уценки) – TheEggSample

+0

Вы устанавливаете позицию, задавая поля этого параметра прямоугольника и возвращаете 'True'. Я не знаю, имеет ли Python концепцию ссылочного параметра, но это то, что «распределение». – andlabs

Смежные вопросы