Так что в настоящее время у меня есть 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()
просто устанавливает выравнивание изображения в кнопке по своим параметрам, а не по самой кнопке. Любые указания относительно того, что я должен делать, чтобы установить положение кнопки? В конце концов, у меня будет несколько кнопок в определенных положениях наложения.
Да, я пробовал, вероятно, 6 часов, просто играя с сигналом 'code'get-child-position signal'code' и до сих пор не работал. Я не уверен, что я делаю неправильно. – TheEggSample
Я создавал обработчик по строкам 'self.overlay.connect (« get-child-position », self.get_child_position)', и я понял, что он посылает мне оверлей и кнопку и прямоугольник Gdk. У меня возникли проблемы с определением того, как на самом деле установить положение из прямоугольника. Я попытался использовать 'set_allocation (modified_gdk_rectangle)', но не получил этого для работы. Я думаю, что я просто смущен тем, как я должен изменить позицию в 'self.get_child_position()' и не могу найти ни одного примера в Интернете. (пожалуйста, извините мое страшное форматирование уценки) – TheEggSample
Вы устанавливаете позицию, задавая поля этого параметра прямоугольника и возвращаете 'True'. Я не знаю, имеет ли Python концепцию ссылочного параметра, но это то, что «распределение». – andlabs