2016-08-31 57 views
2

我正在尝试在Linux中为伴侣面板创建一个小程序。我必须模块Window.pyApplet.py。我得到这个错误:将对象的默认参数添加到类中的函数

Traceback (most recent call last): 
File "./Applet.py", line 37, in WindowButtonsAppletFactory 
WindowButtonsApplet(applet) 
File "./Applet.py", line 23, in WindowButtonsApplet 
CloseButton.connect("Clicked",WindowActions().win_close(SelectedWindow)) 
File "WindowButtonsApplet/Window.py", line 23, in win_close 
Window.close(Timestamp) 
AttributeError: 'WindowActions' object has no attribute 'close' 

** (Applet.py:2191): WARNING **: need to free the control here 

而我不知道为什么,因为wnck librally有一个名为close的属性。 我不想问的第二件事是为什么每次我打电话时都需要初始化类。

这里是代码: Applet.py

#!/bin/env python3 

import gi 
import Window 

gi.require_version("Gtk","3.0") 
gi.require_version("MatePanelApplet", "4.0") 

from gi.repository import Gtk 
from gi.repository import MatePanelApplet 
from Window import * 


def WindowButtonsApplet(applet): 

    Box = Gtk.Box("Horizontal") 

    CloseButton = Gtk.Button("x") 
    MinButton = Gtk.Button("_") 
    UmaximizeButton = Gtk.Button("[]") 

    SelectedWindow = WindowActions().active_window() 
    CloseButton.connect("Clicked",WindowActions().win_close(SelectedWindow)) 
    Box.pack_start(CloseButton) 

    applet.add(Box) 
    applet.show_all() 

// Hack for transparent background 

applet.set_background_widget(applet) 

def WindowButtonsAppletFactory(applet, iid,data): 
    if iid != "WindowButtonsApplet": 
     return False 

    WindowButtonsApplet(applet) 

    return True 

//Mate panel procedure to load the applet on panel 

MatePanelApplet.Applet.factory_main("WindowButtonsAppletFactory", True, 
            MatePanelApplet.Applet.__gtype__, 
            WindowButtonsAppletFactory, None) 

Window.py

#!/usr/bin/env python3 

import time 
import gi 

gi.require_version("Gtk","3.0") 
gi.require_version("Wnck","3.0") 

from gi.repository import Gtk 
from gi.repository import Wnck 

class WindowActions: 

DefaultScreen = Wnck.Screen.get_default() 
DTimestamp = int(time.time()) 

def active_window(self,Screen=DefaultScreen): 
    Screen.force_update() 
    self.ActiveWindow = Screen.get_active_window() 
    return self.ActiveWindow 

def win_close(Window,Timestamp=DTimestamp): 
    Window.close(Timestamp) 

def win_minimize(self,Window): 
    Window.minimize() 

def win_umaximize(self,Window): 
    self.Window.maximize() 

回答

1

你错过了在参考self

def win_close(Window,Timestamp=DTimestamp): 
    Window.close(Timestamp) 

为导致一个WindowActions实例被传递,它没有定义关闭方法,并将您选择的实际窗口传递给Timestamp

self添加到您的方法定义,并应解决它。

+0

谢谢你解决这个问题。我想知道我是如何错过它的。 – IKRadulov