2017-07-10 11 views
1

私はこのサンプルツールをGUIで作成していますが、コードは問題なく動作しています。しかし、私が把握できないことは、どのようにボタンを常にGUIの中央に表示できるかです問題はありません GUIのサイズがどのように変更されるのですか?私は達成するためにさまざまな方法を試みたが、誰も働かない。誰かが私を助けてください!事前にありがとうございます。Python Gtkのボタン

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

software_list = [("Firefox", 2002, "C++"), 
      ("Eclipse", 2004, "Java"), 
      ("Pitivi", 2004, "Python"), 
      ("Netbeans", 1996, "Java"), 
      ("Chrome", 2008, "C++"), 
      ("Filezilla", 2001, "C++"), 
      ("Bazaar", 2005, "Python"), 
      ("Git", 2005, "C"), 
      ("Linux Kernel", 1991, "C"), 
      ("GCC", 1987, "C"), 
      ("Frostwire", 2004, "Java")] 

class WB_Window(gtk.Window): 
    def __init__(self): 
    gtk.Window.__init__(self, title="Write Blocker") 
    self.set_border_width(10) 
    self.set_position(gtk.WindowPosition.CENTER) 
    self.set_default_size(1000, 450) 

    self.outter_box = gtk.Box(gtk.Orientation.HORIZONTAL, spacing=10) 
    self.outter_box.set_homogeneous(True) 
    self.add(self.outter_box) 

    grid = gtk.Grid() 
    grid.set_row_spacing(10) 
    grid.set_column_homogeneous(True) 
    self.outter_box.add(grid) 


    self.software_liststore = gtk.ListStore(str, int, str) 
    for software_ref in software_list: 
     self.software_liststore.append(list(software_ref)) 
    tree = gtk.TreeView(self.software_liststore) 

    for i, column_title in enumerate(["Software", "Release Year", "Programming Language"]): 
     renderer = gtk.CellRendererText() 
     column = gtk.TreeViewColumn(column_title, renderer, text=i) 
     tree.append_column(column) 

    self.scrollable_treelist = gtk.ScrolledWindow() 
    self.scrollable_treelist.set_vexpand(True) 
    grid.add(self.scrollable_treelist) 
    self.scrollable_treelist.add(tree) 

    hbox = gtk.ButtonBox.new(gtk.Orientation.HORIZONTAL) 
    hbox.set_homogeneous(True) 
    valign = gtk.Alignment(xalign=1.0, yalign=1.0, xscale=1.0, yscale=1.0) 
    hbox.pack_end(valign,False,False,0) 
    grid_2 = gtk.Grid() 

    grid.attach_next_to(grid_2,None,gtk.PositionType.BOTTOM,1,1) 
    grid_2.add(hbox) 


    button_mount = gtk.Button(label="Mount") 
    hbox.add(button_mount) 
    button_ro = gtk.Button(label="Read-Only") 
    hbox.add(button_ro) 
    button_rw = gtk.Button(label="Read-Write") 
    hbox.add(button_rw) 
    button_quit = gtk.Button(label="Quit",stock=gtk.STOCK_QUIT) 
    button_quit.show() 
    hbox.add(button_quit) 

win = WB_Window() 
win.connect("delete-event",gtk.main_quit) 
win.show_all() 
gtk.main() 
+1

[Glade](https://glade.gnome.org/)で遊んだことはありますか?これは、コンテナが何をしているのか把握する簡単な方法です。 – theGtknerd

答えて

0

多くの冗長コンテナがあります。いくつか削除された:

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

software_list = [("Firefox", 2002, "C++"), 
      ("Eclipse", 2004, "Java"), 
      ("Pitivi", 2004, "Python"), 
      ("Netbeans", 1996, "Java"), 
      ("Chrome", 2008, "C++"), 
      ("Filezilla", 2001, "C++"), 
      ("Bazaar", 2005, "Python"), 
      ("Git", 2005, "C"), 
      ("Linux Kernel", 1991, "C"), 
      ("GCC", 1987, "C"), 
      ("Frostwire", 2004, "Java")] 

class WB_Window(gtk.Window): 
    def __init__(self): 
     gtk.Window.__init__(self, title="Write Blocker") 
     self.set_border_width(10) 
     self.set_position(gtk.WindowPosition.CENTER) 
     self.set_default_size(1000, 450) 

     #self.outter_box = gtk.Box(gtk.Orientation.HORIZONTAL, spacing=10) 
     self.outter_box = gtk.VBox(False,spacing=10) 
     self.add(self.outter_box) 

     self.software_liststore = gtk.ListStore(str, int, str) 
     for software_ref in software_list: 
      self.software_liststore.append(list(software_ref)) 
     tree = gtk.TreeView(self.software_liststore) 

     for i, column_title in enumerate(["Software", "Release Year", "Programming Language"]): 
      renderer = gtk.CellRendererText() 
      column = gtk.TreeViewColumn(column_title, renderer, text=i) 
      tree.append_column(column) 

     self.scrollable_treelist = gtk.ScrolledWindow() 
     self.scrollable_treelist.set_vexpand(True) 
     self.scrollable_treelist.set_hexpand(True) 
     self.outter_box.pack_start(self.scrollable_treelist, False, True, 0) 
     self.scrollable_treelist.add(tree) 

     hbox = gtk.ButtonBox.new(gtk.Orientation.HORIZONTAL) 
     hbox.set_layout(gtk.ButtonBoxStyle.CENTER) 
     self.outter_box.pack_start(hbox, False, True, 0) 

     # Add CSS "linked" class 
     hbox.get_style_context().add_class("linked") 


     button_mount = gtk.Button(label="Mount") 
     hbox.add(button_mount) 
     button_ro = gtk.Button(label="Read-Only") 
     hbox.add(button_ro) 
     button_rw = gtk.Button(label="Read-Write") 
     hbox.add(button_rw) 
     button_quit = gtk.Button(label="Quit",stock=gtk.STOCK_QUIT) 
     button_quit.show() 
     hbox.add(button_quit) 

win = WB_Window() 
win.connect("delete-event",gtk.main_quit) 
win.show_all() 
gtk.main() 

結果のレイアウトは次のようになります。

enter image description here

Gtk.Boxの向きが(Fedora23)を変えていなかったので、私はGtk.VBoxを使用する必要がありました。また、CSS linkedクラスを追加してボタンを「接続」させました。

+0

ありがとう、あなたは伝説です! –

関連する問題