2015-05-27 29 views
0

我剛剛更新到Fedora 22,並得到它與侏儒3.16。 我正在運行我的一個小應用程序,並收到了棄用警告。 Alignment對象的xscale屬性將消失。但是,有一個問題,我不能在沒有它的情況下展開按鈕的子項。如何展開按鈕內的孩子?

我創造了這個簡單的測試代碼:

#!/usr/bin/env python3 

import sys 
from gi.repository import Gtk 


class Application(Gtk.Application): 

    def __init__(self): 
     super().__init__() 
     self.connect('activate', self.on_activate) 
     self.connect('startup', self.on_startup) 

    def on_startup(self, app): 
     self.window = Gtk.ApplicationWindow(application=app) 
     self.window.set_position(Gtk.WindowPosition.MOUSE) 
     self.window.set_default_size(600, 200) 
     button = Gtk.Button(label='test') 
     image = Gtk.Image.new_from_file('noimage.png') 
     button.set_always_show_image(True) 
     button.set_image(image) 
     # I can't expand without this property bellow 
     button.get_child().set_property('xscale', 1.0) 
     self.window.add(button) 

    def on_activate(self, app): 
     self.window.show_all() 


if __name__ == '__main__': 
    main_app = Application() 
    exit_status = main_app.run(sys.argv) 
    sys.exit(exit_status) 

你應該可以看到一個小寬的窗口,一個按鈕在裏面,覆蓋所有窗口的可用空間。在按鈕內部,您應該在左側看到一個無效的圖像圖標,並在右側看到一個文本標籤。

我使用的XScale屬性中分離的圖像從標籤,這擴大了按鈕內部的對準對象的大小,並給出用於標籤和圖像更多的空間來擴展開。我想知道沒有它的方法來達到同樣的結果。

我用GTK檢查器(按Ctrl + Shift + d,而應用程序正在運行),並想盡理智,少理智,財產在該窗口中幾乎所有的對象,但沒有成功。我嘗試了我可靠的搜索引擎,但無法找到任何具有此類特定問題的人。

回答

2

GtkAlignment本身已被棄用。從the docs

GtkAlignment已在3.14中棄用,不應在新編寫的代碼中使用。通過使用子窗口小部件上的「halign」,「valign」和「margin」屬性可以達到所需的效果。

沒有太多,你可以在這裏做。 GtkAlignment是GtkButton的一個內部子代,並且存在依賴於此結構的代碼(比如你的代碼)。如果GtkAlignment被刪除(例如在GTK + 4中),GtkButton的內部結構也會改變。

如果你真的要避免使用過時的功能,你完全可以用水平GtkBox更換按鈕的孩子,包在圖像和標籤裏面,設置圖像的hexpandTrue模擬1 xscale

有關新屬性的更多信息,請參閱this

+0

謝謝。我剛剛創建了一個沒有任何參數的Button對象,我認爲它默認會爲它添加一個空標籤,但是nop。我甚至不需要從按鈕中移除孩子。剛剛創建了一個漂亮的水平框,像你所建議的那樣,將它添加到按鈕中,並將其他小部件打包在框中。它的工作就像一個魅力。^_ ^ – xor