2016-04-01 17 views
0

GTK3 + Grid (http://lazka.github.io/pgi-docs/Gtk-3.0/classes/Grid.html#Gtk.Grid) ile python satırları ve sütunları içeren bir ızgarayı dinamik olarak doldurmak istiyorum, ancak düzgün satırları silmek istiyorum . Bu durumda, her ikinci satırı siler. Üst satırda gtk.grid (GTK3 +/Python) içinde bir satır silme

bir döngü içinde yeni Satırları oluşturuluyor neden ... Fikrim yok:

self.__builder.attach_next_to(cell[0],None,Gtk.PositionType.TOP,1,1) #Place a new Row 

öz .__ oluşturucu Izgara, hücre [0] Etiket Sütun doldurmak için dahildir.

self.__builder.remove_row(-self.__v_size_value) 

i merak, sadece eksi işareti ile çalışır, ama sadece her saniye satırda çünkü: i onları silme deneyin nasıl. Belki onları üst yöne yerleştirdiğim için? (Ben bu şekilde denedim, ve doğru, orada "konum" değeri pozitif olması gerekirken) self .__ v_size_value Geçici Satır Miktarını içerir.

Bu Satırları oluşturuluyor ve tekrar onları silme çalışırken bakmak nasıl:

  • İlk -> üret satır bir döngü içinde yukarıda olduğu Komutanlığı ile (Örnek: 6 Satırlar)
  • İkinci -> bu komut ile
    • Satır 6/remove_row (-6) satırları silme deneyin/Satır 6 silinir
    • Sıra 5/remove_row (-5)/Satır 4 silinir ??? (Satır 5 hala kalır)
    • Satır 4/remove_row (-4)/Satır 2 silindi ???

      : Bu arıza gösteren küçük bir senaryo yazdı

/hiçbir şey bir daha (Sıra 1 hala kalır) olur

  • Satır 3/remove_row (-3) (Sıra 3 hala kalır)
    import gi 
    gi.require_version('Gtk', '3.0') 
    from gi.repository import Gtk 
    
    class MyWindow(Gtk.Window): 
    
        row = 1 
    
        def __init__(self): 
         Gtk.Window.__init__(self, title="Hello World") 
    
         self.box = Gtk.Box.new(Gtk.Orientation.VERTICAL,4) 
         self.add(self.box) 
    
         self.button = Gtk.Button(label="Insert Row") 
         self.button.connect("clicked", self.on_button_clicked) 
         self.box.pack_start(self.button, True, True, 0) 
    
         self.button2 = Gtk.Button(label="Remove Row") 
         self.button2.connect("clicked", self.on_button2_clicked) 
         self.box.pack_start(self.button2, True, True, 0) 
    
         self.grid = Gtk.Grid() 
         self.box.pack_start(self.grid, True, True, 0) 
    
        def on_button_clicked(self, widget): 
         print("Increasing Row" + str(self.row)) 
         label = Gtk.Label(self.row) 
         self.grid.attach_next_to(label,None,Gtk.PositionType.TOP,1,1) 
         self.row = self.row + 1 
         self.grid.show_all() 
    
        def on_button2_clicked(self, widget): 
         self.row = self.row - 1 
         print ("Decrease Row #" + str(self.row)) 
         self.grid.remove_row(-self.row) 
         self.grid.show_all() 
    
    
    win = MyWindow() 
    win.connect("delete-event", Gtk.main_quit) 
    win.show_all() 
    Gtk.main() 
    
  • +0

    Bu kod sadece bir satırı kaldırmak, her satırını kaldıramaz. – Goyo

    +0

    Üzgünüm, kendimi yanıltıcı olarak ifade ettim. For döngüsünde Satırlar oluşturur. Ondan sonra tekrar silmeye çalışıyorum. Ancak "remove_row" her ikinci Satırda yürürlüğe girer. Örnek: (Satır 6/remove_row (6)) -> Satır 6 silindi, (Satır 5/remove_row (5)) -> hiçbir şey olmuyor, (Satır 4/remove_row (4)) -> Satır 4 silindi ve böylece ... –

    +0

    Geliştirilebileceğini düşünüyorsanız, sorunuzu düzenleyebilirsiniz. Ayrıca, 'remove_row (5)', 5. satırdaki satırı kaldırmalıdır, eğer bu olmazsa, gtk3 veya python bağlamalarında bir hata olması gerekir. Neler olup bittiğini bilmek yardımcı olabilir. – Goyo

    cevap

    1

    Bir çözümüm var, Lazka'ya sordum ve bana yardım etmek için çok nazikti. Yukarıda belirtildiği gibi, Kılavuz, üstte eklenmiş sütunlar için negatif konumları kullanır. Bunu yaptığınızda, bir satırın kaldırılması (örneğin -10), diğer satırların bire kadar yeni bir numara almasına neden olur. Yani ilk sıra, örneğin tekrar -10.

    Bana yardım ettiğin için Lazka'ya teşekkürler!

    İlgili konular