无法通过Gtk.Buildable.get_name(obj)获取窗口小部件名称

时间:2014-05-27 14:04:15

标签: widget gtk pygtk

我想显示和隐藏一些窗口并记录他们的名字。

但是我无法做到,所以我打印了一些有趣的事实:

print Gtk.Buildable.get_name(menuitem)
print menuitem.get_toplevel()
print Gtk.Buildable.get_name(menuitem.get_toplevel())

--- OUTPUT -----------------------------------------------

Configurazione2_Menuitem
<Window object at 0x7f81880e7280 (GtkWindow at 0x15b9a40)>
None

所以我无法隐藏当前窗口。因为这个不能工作:

menuitem.get_toplevel().hide() #hide_currentwindow

2 个答案:

答案 0 :(得分:-1)

name,hide和show属性链接到gtk.widget

>>> import gtk
>>> w = gtk.Window()
>>> w.get_name()
'GtkWindow'
>>> w.set_name("test")
>>> w.get_name()
'test'
>>> 
>>> w.show()
>>> w.hide()
>>> 

答案 1 :(得分:-1)

它对我有用。

下面的代码打开一个带有MenuItem和Button的窗口,按下该按钮隐藏窗口,方法是通过调用MenuItem.get_toplevel().hide()来获取对它的引用

现在,这回答了帖子中提到的问题,但不是标题中的问题。您没有说明为什么要获取窗口小部件的名称,只是在您有一个子菜单项的引用时要隐藏窗口。

import gtk
import time

class MyWindow():
    def __init__(self):
        win = gtk.Window()
        win.connect('destroy',gtk.main_quit)

        self.menu = gtk.MenuItem('MenuItem')
        hbox = gtk.HBox()
        hbox.pack_start(self.menu)

        btn = gtk.Button('HideMe')
        btn.connect('pressed',self.hide_me)
        hbox.pack_start(btn)

        win.add(hbox)
        win.show_all()

    def hide_me(self, widget):
        self.menu.get_toplevel().hide()
        print 'Hiding'
        time.sleep(2)
        print 'Showing'
        self.menu.get_toplevel().show()

MyWindow()
gtk.main()

编辑: 更简单的版本:

import gtk
import time

class MyWindow():
    def __init__(self):
        win = gtk.Window()
        win.connect('destroy',gtk.main_quit)
        win.set_size_request(50,50)
        menuitem = gtk.MenuItem()
        menuitem.set_label("I'm a Menuitem")
        win.add(menuitem)
        win.show_all()
        print 'Hiding window now...'
        menuitem.get_toplevel().hide()
        print 'Showing window now...'
        time.sleep(2)
        menuitem.get_toplevel().show()
MyWindow()
gtk.main()