2017-11-06 28 views
0

첨부 된 스크린 샷에 표시된대로 내 Champlain 맵이 내 GtkWindow를 오버플로합니다. 인터넷에서 비슷한 문제를 가진 사람을 찾을 수 없었습니다.PyGtk : 위젯이 창을 오버플로합니다.

Glade에서 GUI를 만들었고 하나의 빈 패널을 남겨 두었습니다. 코드를 작성하여 GtkChamplain.Embed 위젯을 사용하여지도를 표시 할 수있었습니다. Embed의 크기 요청을 설정하여 맵 크기가 조정 된지도가 삼키는 것을 막을 때까지는 거의 정상적으로 작동했습니다.

screenshot of the problem

나는이 일이하고 싶지 않았다

screenshot of the previous problem

물론,이 창을 축소 할 수 있습니다 얼마나 작은과에 제한을 설정하여이 문제를 해결할 수있는 방법을 큰 패널의 왼쪽이 커질 수 있습니다. 난 그냥 Embed의 크기 요청을 설정하여 적절한 방법으로 그것을 할 것입니다. 왜 이런 일이 일어나고 있는지 또는 어떻게 올바르게 만드는 지 아는 사람이 있습니까?

여기 내 전체 코드가 있습니다.

# -*- coding: utf-8 -*- 

import gi 
gi.require_version('Champlain', '0.12') 
gi.require_version('GtkChamplain', '0.12') 
gi.require_version('GtkClutter', '1.0') 
from gi.repository import GtkClutter, Clutter 
GtkClutter.init([]) # Must be initialized before importing those: 
from gi.repository import GObject, Gtk, Champlain, GtkChamplain, Pango 

class UserInterface: 

    def __init__(self): 
     builder = Gtk.Builder() 
     builder.add_from_file('zahori.glade') 

     self.client_list = builder.get_object("client-list") 
     self.main_window = builder.get_object("main-window") 
     self.main_panel = builder.get_object("main-panel") 
     self.client_treeview = builder.get_object("client-treeview") 
     self.main_window = builder.get_object("main-window") 
     self.status_label = builder.get_object("status-label") 

     self.map_embed = GtkChamplain.Embed() 
     self.map_embed.set_size_request(550, 300) 
     self.main_panel.add(self.map_embed) 

     self.main_window.connect("destroy", Gtk.main_quit) 
     self.main_window.show_all() 


UserInterface() 
Gtk.main() 

아래에서 내 .glade 파일을 찾을 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Generated with glade 3.20.0 --> 
<interface> 
    <requires lib="gtk+" version="3.20"/> 
    <object class="GtkListStore" id="client-list"/> 
    <object class="GtkApplicationWindow" id="main-window"> 
    <property name="can_focus">False</property> 
    <property name="title" translatable="yes">Zahori</property> 
    <property name="default_width">700</property> 
    <property name="default_height">400</property> 
    <child> 
     <object class="GtkBox" id="main-box"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <property name="orientation">vertical</property> 
     <child> 
      <object class="GtkMenuBar" id="main-menu-bar"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <child> 
       <object class="GtkMenuItem"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">_Archivo</property> 
       <property name="use_underline">True</property> 
       <child type="submenu"> 
        <object class="GtkMenu"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-new</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-open</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-save</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-save-as</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkSeparatorMenuItem"> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-quit</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        </object> 
       </child> 
       </object> 
      </child> 
      <child> 
       <object class="GtkMenuItem"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">_Editar</property> 
       <property name="use_underline">True</property> 
       <child type="submenu"> 
        <object class="GtkMenu"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-cut</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-copy</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-paste</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-delete</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        </object> 
       </child> 
       </object> 
      </child> 
      <child> 
       <object class="GtkMenuItem"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">_Ver</property> 
       <property name="use_underline">True</property> 
       </object> 
      </child> 
      <child> 
       <object class="GtkMenuItem"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">Ay_uda</property> 
       <property name="use_underline">True</property> 
       <child type="submenu"> 
        <object class="GtkMenu"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <child> 
         <object class="GtkImageMenuItem"> 
         <property name="label">gtk-about</property> 
         <property name="visible">True</property> 
         <property name="can_focus">False</property> 
         <property name="use_underline">True</property> 
         <property name="use_stock">True</property> 
         </object> 
        </child> 
        </object> 
       </child> 
       </object> 
      </child> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">0</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkToolbar" id="main-toolbar"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <child> 
       <object class="GtkToolButton" id="new-scan-button"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="action_name">new-scan</property> 
       <property name="label" translatable="yes">New scan</property> 
       <property name="use_underline">True</property> 
       <property name="stock_id">gtk-new</property> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="homogeneous">True</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkToolButton" id="open-button"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="action_name">open-file</property> 
       <property name="label" translatable="yes">Open file</property> 
       <property name="use_underline">True</property> 
       <property name="stock_id">gtk-open</property> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="homogeneous">True</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkToolButton" id="save-button"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="action_name">save-file</property> 
       <property name="label" translatable="yes">Save to file</property> 
       <property name="use_underline">True</property> 
       <property name="stock_id">gtk-save</property> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="homogeneous">True</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkPaned" id="main-panel"> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <child> 
       <object class="GtkTreeView" id="client-treeview"> 
       <property name="visible">True</property> 
       <property name="can_focus">True</property> 
       <property name="model">client-list</property> 
       <child internal-child="selection"> 
        <object class="GtkTreeSelection"/> 
       </child> 
       <child> 
        <object class="GtkTreeViewColumn" id="client-mac"> 
        <property name="resizable">True</property> 
        <property name="min_width">200</property> 
        <property name="title" translatable="yes">Device</property> 
        </object> 
       </child> 
       </object> 
       <packing> 
       <property name="resize">False</property> 
       <property name="shrink">False</property> 
       </packing> 
      </child> 
      <child> 
       <placeholder/> 
      </child> 
      </object> 
      <packing> 
      <property name="expand">True</property> 
      <property name="fill">True</property> 
      <property name="position">2</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkBox" id="status-bar"> 
      <property name="height_request">20</property> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <child> 
       <object class="GtkLabel" id="status-label"> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="margin_left">6</property> 
       </object> 
       <packing> 
       <property name="expand">False</property> 
       <property name="fill">True</property> 
       <property name="position">0</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">3</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 

답변

1

내가 너무 빨리 올렸을 수 있습니다. 내가 GtkContainerchild_set_property() 메서드를 발견했을 때 나는 그 대답을 빨리 발견했다. 설정하면

...

self.main_panel.add(self.map_embed) 
self.main_panel.child_set_property(self.map_embed,"resize",False) 
self.main_panel.child_set_property(self.map_embed,"shrink",False) 

내 인터페이스는 적절하게 행동하기 시작했다. 다르게 요구하지 않는 한, 누군가 Q와 비슷한 문제에 걸리면이 Q를 & A에 보관합니다.