【问题标题】:Adding default parameter that is object to a function that is inside a class将作为对象的默认参数添加到类内的函数中
【发布时间】:2016-08-31 22:43:34
【问题描述】:

我正在尝试为 linux 中的 mate-panel 制作一个小程序。我必须模块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 库有一个名为 close 的属性。 我不想问的第二件事是为什么每次调用时都需要初始化 Class。

以下代码来自: 小程序.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)

窗口.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()

【问题讨论】:

    标签: python python-3.x gtk3 pygobject wnck


    【解决方案1】:

    您缺少对self 的引用:

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

    因此传递了一个 WindowActions 实例,它没有定义关闭方法,并且您实际选择的窗口被传递给 Timestamp

    self 添加到您的方法定义中应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      相关资源
      最近更新 更多