2017-09-16 10 views
8

内Gtk.TreeViewを使用しているとき、私は私のGTK 3アプリケーションで次の警告受けてるGTK警告 "...にサイズの割り当て":Gtk.ScrolledWindow

のGtk-WARNING **:割り当てサイズを__main__+MCVEWindow 0000000004e93b30 gtk_widget_get_preferred_width/height()を呼び出すことなく。どのようにコードは割り振るサイズを知っていますか?

警告Gtk.TreeViewを含むGtk.ScrolledWindowがグリッドに取り付けられたときに、グリッド自体がgtk.ApplicationWindowに取り付けられており、実際に表示されるスクロールバーのための十分な要素がある起こります。スクロール可能にするのに十分な要素がない場合、警告は表示されません。

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk as gtk 


class MCVEWindow(gtk.ApplicationWindow): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

     self._tree_view = gtk.TreeView() 
     self._tree_view.set_hexpand(True) 
     self._tree_view.set_vexpand(True) 

     self.populate_tree_view() # populate tree view with fake items 

     window_column = gtk.TreeViewColumn(
      "Window", gtk.CellRendererText(), 
      text=0 
     ) 
     window_column.set_resizable(True) 
     handle_column = gtk.TreeViewColumn(
      "Handle", gtk.CellRendererText(), 
      text=1 
     ) 
     class_column = gtk.TreeViewColumn(
      "Class name", gtk.CellRendererText(), 
      text=2 
     ) 
     self._tree_view.append_column(window_column) 
     self._tree_view.append_column(handle_column) 
     self._tree_view.append_column(class_column) 

     scrolled_tree_view = gtk.ScrolledWindow() 
     scrolled_tree_view.add(self._tree_view) 

     toolbar = gtk.Toolbar() 

     expand_tree_view_button = gtk.ToolButton(icon_name="list-add") 
     expand_tree_view_button.connect(
      "clicked", 
      lambda e: self._tree_view.expand_all() 
     ) 
     collapse_tree_view_button = gtk.ToolButton(icon_name="list-remove") 
     collapse_tree_view_button.connect(
      "clicked", 
      lambda e: self._tree_view.collapse_all() 
     ) 
     toolbar.insert(expand_tree_view_button, -1) 
     toolbar.insert(collapse_tree_view_button, -1) 

     status_bar = gtk.Statusbar() 
     status_bar.push(
      status_bar.get_context_id("Status message"), 
      "A status message." 
     ) 

     self._master_grid = gtk.Grid() 
     self._master_grid.attach(toolbar, 0, 0, 1, 1) 
     self._master_grid.attach(scrolled_tree_view, 0, 1, 1, 1) 
     self._master_grid.attach(status_bar, 0, 2, 1, 1) 
     self.add(self._master_grid) 

     self.connect("delete-event", gtk.main_quit) 

     self.show_all() 

    def populate_tree_view(self): 
     tree_store = gtk.TreeStore(str, str, str) 
     # Warnings don't occur when there are less than 100 "root" items 
     for i in range(100): 
      item1 = tree_store.append(
       None, 
       ["Window " + str(i + 1), "12345678", "ClassName"] 
      ) 
      for j in range(3): 
       item2 = tree_store.append(
        item1, 
        ["Window " + str(i + 1) + str(i + 2), 
        "12345678", 
        "ClassName"] 
       ) 
       for k in range(5): 
        tree_store.append(
         item2, 
         ["Window " + str(i + 1) + str(j + 1) + str(k + 1), 
         "12345678", 
         "ClassName"] 
        ) 

     self._tree_view.set_model(tree_store) 


class MCVEApp(gtk.Application): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

    def do_activate(self): 
     MCVEWindow() 
     gtk.main() 


if __name__ == "__main__": 
    MCVEApp().run() 

環境設定がある場合は、このコードをコピーして貼り付けて実行する必要があります。

警告は特定のパターンに従わず、時には1つの警告があり、2つ以上の警告があることがあります。私はすべてのツリー項目を展開するたびに荒廃もポップアップします。

GTKのバージョンは、これらの警告が発生する可能性が何3.22.18

のですか?

+0

あなたは[MCVE](https://stackoverflow.com/help/mcve)をお持ちですか? – theGtknerd

+0

はい、質問を編集しました。環境を設定している場合は、それを実行できるはずです。 – Doom8890

+0

申し訳ありませんが、Gtk 3.18を使用してそのエラーを作成することはできません。それらはあなたのアプリの使い勝手に影響しますか? – theGtknerd

答えて

0

私は解決策に私を導くGTKアプリケーションdevメーリングリストに答え受け取っ:その後、スクロールウィンドウに追加されたGTKグリッドにTreeViewコントロールを取り付け

は私のために問題を解決しました。代わりに、この

scrolled_tree_view = gtk.ScrolledWindow() 
scrolled_tree_view.add(self._tree_view) 

あなたは残念ながら、これはどこにも文書化されていない

scrolled_tree_view = gtk.ScrolledWindow() 
grid = gtk.Grid() 
grid.attach(self._tree_view, 0, 0, 1, 1) 
scrolled_tree_view.add(grid) 

次の操作を行う必要があります。

関連する問題