pygtk系统托盘图标不存在';行不通
我试图在程序中显示系统托盘图标。 当我启动程序时,它显示窗口,当我关闭窗口时,它被隐藏。 然后,如果我单击系统托盘图标,它会显示一个空白窗口,但不会显示窗口的内容。为什么会发生这种情况? 这是我的密码:pygtk系统托盘图标不存在';行不通,gtk,pygtk,trayicon,Gtk,Pygtk,Trayicon,我试图在程序中显示系统托盘图标。 当我启动程序时,它显示窗口,当我关闭窗口时,它被隐藏。 然后,如果我单击系统托盘图标,它会显示一个空白窗口,但不会显示窗口的内容。为什么会发生这种情况? 这是我的密码: class Main(gtk.Window): def __init__(self): super(Main,self).__init__() self.set_title("Virtual Machine Monitor") self.
class Main(gtk.Window):
def __init__(self):
super(Main,self).__init__()
self.set_title("Virtual Machine Monitor")
self.set_position(gtk.WIN_POS_CENTER)
self.set_default_size(640,600)
self.set_geometry_hints(min_width=640,min_height=600)
self.set_icon_from_file("../images/activity_monitor2.png")
self.connect("destroy",self.window_destroy)
menubar = self.add_menubar()
pixbuf = gdk.pixbuf_new_from_file_at_size("../images/activity_monitor2.png",25,25)
statusicon = gtk.StatusIcon()
statusicon = gtk.status_icon_new_from_pixbuf(pixbuf)
statusicon.connect("activate",self.tray_activate)
self.show_all()
def tray_activate(self,widget):
self.show_all()
def window_destroy(self,widget):
self.hide_all()
if __name__ == "__main__":
Main()
gtk.main()
当我点击系统托盘图标时,它会显示一个窗口,但会显示一个空白窗口
所以请帮帮我。
感谢高级版。我在您的窗口中没有看到任何控件,我想您只是从代码片段中删掉了这段代码。看看下面的代码是否适合您。每次单击托盘图标时,它都会打开一个窗口。此外,还将为托盘注册一个弹出菜单
import sys
import gtk
class MainWindow(gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.set_title("Virtual Machine Monitor")
self.set_position(gtk.WIN_POS_CENTER)
self.set_default_size(640, 600)
self.set_geometry_hints(min_width=640, min_height=600)
self.set_icon_from_file("../images/activity_monitor2.png")
self.connect("destroy", self.window_destroy)
box = gtk.VBox()
button = gtk.Button("Test Button")
box.pack_start(button, False)
self.add(box)
self.show_all()
def window_destroy(self,widget):
self.hide_all()
class TrayIcon(gtk.StatusIcon):
def __init__(self):
gtk.StatusIcon.__init__(self)
# using a stock icon, load your pixmap here
self.set_from_stock(gtk.STOCK_FIND)
self.set_tooltip('Tracker Desktop Search')
self.set_visible(True)
self.menu = menu = gtk.Menu()
window_item = gtk.MenuItem("Show Window")
window_item.connect("activate", self.show_window, "about")
menu.append(window_item)
quit_item = gtk.MenuItem("Quit")
quit_item.connect("activate", self.quit, "file.quit")
menu.append(quit_item)
menu.show_all()
self.connect("activate", self.show_window)
self.connect('popup-menu', self.icon_clicked)
def show_window(self, widget, event=None):
MainWindow()
def icon_clicked(self, status, button, time):
self.menu.popup(None, None, None, button, time)
def quit(self, widget, event=None):
sys.exit(0)
if __name__ == "__main__":
TrayIcon()
gtk.main()
我在你的窗口上没有看到任何控件,我想你只是从代码片段中删掉了这段代码。看看下面的代码是否适合您。每次单击托盘图标时,它都会打开一个窗口。此外,还将为托盘注册一个弹出菜单
import sys
import gtk
class MainWindow(gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.set_title("Virtual Machine Monitor")
self.set_position(gtk.WIN_POS_CENTER)
self.set_default_size(640, 600)
self.set_geometry_hints(min_width=640, min_height=600)
self.set_icon_from_file("../images/activity_monitor2.png")
self.connect("destroy", self.window_destroy)
box = gtk.VBox()
button = gtk.Button("Test Button")
box.pack_start(button, False)
self.add(box)
self.show_all()
def window_destroy(self,widget):
self.hide_all()
class TrayIcon(gtk.StatusIcon):
def __init__(self):
gtk.StatusIcon.__init__(self)
# using a stock icon, load your pixmap here
self.set_from_stock(gtk.STOCK_FIND)
self.set_tooltip('Tracker Desktop Search')
self.set_visible(True)
self.menu = menu = gtk.Menu()
window_item = gtk.MenuItem("Show Window")
window_item.connect("activate", self.show_window, "about")
menu.append(window_item)
quit_item = gtk.MenuItem("Quit")
quit_item.connect("activate", self.quit, "file.quit")
menu.append(quit_item)
menu.show_all()
self.connect("activate", self.show_window)
self.connect('popup-menu', self.icon_clicked)
def show_window(self, widget, event=None):
MainWindow()
def icon_clicked(self, status, button, time):
self.menu.popup(None, None, None, button, time)
def quit(self, widget, event=None):
sys.exit(0)
if __name__ == "__main__":
TrayIcon()
gtk.main()
您必须处理
delete事件
,以仅隐藏窗口,而不销毁窗口(默认情况下)
您必须处理
delete事件
,以仅隐藏窗口,而不销毁窗口(默认情况下)
小更正:你不需要再处理"销毁"了,是的,我没注意。已修复。
show\u all()
不需要在托盘中激活(因为show\u all
在中调用了一次init\uuuuuu
)和show()
就足够了,除非present()
更好。次要更正:你不需要再处理“销毁”了。是的,我没有注意到这一点。已修复。托盘激活
中不需要show\u all()
(因为在中调用一次show\u all
)和show()
就足够了,除非present()
更好。