使用python将2个小部件添加到gtk中

时间:2013-12-09 20:28:48

标签: python menu tree widget gtk

这些是使用python的前几次尝试,我想向gtk添加2个小部件。 我知道并且看到你一次只能添加一个并且已经知道如何做到这一点。 谁能给我一个漏洞,能够拥有一个“树”和一个鼠标右键菜单? 这是我的代码:

import gtk

class treeNode():
   def __init__(self, father, name, link):
      self.father = father
      self.name = name
      self.link = link


class PyApp(gtk.Window): 
   def __init__(self):
       super(PyApp, self).__init__()

       self.set_size_request(700, 500)
       self.set_position(gtk.WIN_POS_CENTER)

       self.connect("destroy", gtk.main_quit)
       self.set_title("Assignment1")

       eventbox = gtk.EventBox()

       tree = gtk.TreeView()

       trying = gtk.TreeViewColumn()
       trying.set_title("Get Busy")

       cell = gtk.CellRendererText()
       trying.pack_start(cell, True)
       trying.add_attribute(cell, "text", 0)

       treestore = gtk.TreeStore(str)

       father = None
       name = ["default"]

       node = treestore.append(father, name)

       node = treeNode(father, name, node)
       lst = [node]

       father = lst[0].link
       name = ["cluster1"]

       node = treestore.append(father, name)

       node = treeNode(father, name, node)
       lst.append(node)

       father = lst[1].link
       name = ["clusterA"]

       node = treestore.append(father, name)

       node = treeNode(father, name, node)
       lst.append(node)

       father = lst[0].link
       name = ["cluster2"]

       node = treestore.append(father, name)

       node = treeNode(father, name, node)
       lst.append(node)

       father = lst[3].link
       name = ["clusterA"]

       node = treestore.append(father, name)

       node = treeNode(father, name, node)
       lst.append(node)

       tree.append_column(trying)
       tree.set_model(treestore)

       self.add(tree)
       self.show_all()

       self.menu = gtk.Menu()
       addMenu = gtk.MenuItem("Add")
       renManu = gtk.MenuItem("Rename")
       remMenu = gtk.MenuItem("Remove")
       self.menu.append(addMenu)
       self.menu.append(renManu)
       self.menu.append(remMenu)

       eventbox.connect("button-release-event", self.menu_display)

       self.add(eventbox)

       self.show_all()



   def menu_display(self, widget, event):
       if event.button == 3:
           self.menu.popup(None, None, None, event.button, event.time, None)
           self.menu.show_all()


PyApp()
gtk.main()

非常感谢

1 个答案:

答案 0 :(得分:1)

请尝试写清楚的问题:“我想向gtk添加2个小部件”没有意义。

我假设您要将多个小部件添加到Window(或其他一些Bin)中,是吗?你不能这样做,因为Bin只能有一个孩子(因为运行时错误消息会告诉你):相反,你应该在窗口中添加一个合适的容器小部件 - 比如VBox - 然后将你的小部件添加到容器小部件。