2016-05-18 64 views
0

現在、私はGtkオーバーレイを持っています。私はGtkのGtk.Align.CENTERを使用して私のポジションにしたいボタンを持ち出すことができますが、ボタンを配置するのではなく、ボタンを配置するのにずっと時間をかけています。Gtkオーバーレイで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のマージンプロパティまたはGtkOverlayのget-child-position信号を使用して位置を設定します。

+0

ええ、私はおそらく6時間かけて試してきました。ちょうど 'code'get-子 - 位置信号' code'で遊んでいて、それでも動作させられていません。私は何が間違っていたのか分かりません。 – TheEggSample

+0

私は 'self.overlay.connect(" get-child-position "、self.get_child_position)'の行に沿ってハンドラを作成していました。オーバーレイとボタンとGdk Rectangleを送信していました。私はどのように実際に矩形から位置を設定するかを考え出すのに問題がありました。 'set_allocation(modified_gdk_rectangle)'を使ってみましたが、うまく動作しませんでした。私は 'self.get_child_position()'の位置をどのように変更するのか混乱していると思いますし、オンラインでも例を見つけることはできません。 (私の恐ろしいマークダウンの書式を許してください) – TheEggSample

+0

位置を設定するには、その矩形パラメータのフィールドを設定し、 'True'を返します。私は、Pythonが参照パラメータの概念を持っているかどうかは分かりませんが、それは 'allocation'と同じです。 – andlabs

関連する問題