2

我有一个小的 PyGTK 程序,它有一个状态图标。左键单击状态图标时,应出现一个带有 TextView 的窗口,并且应在 TextView 小部件中显示预定义的文本。我的问题是我不知道如何将要显示的文本作为参数传递给创建窗口的方法。我可以毫无问题地使用 TextView 创建窗口,但我无法在其中插入文本。这是我的代码:

import gtk
import keybinder

class PyPPrinter(object):
    def __init__(self):
        self.staticon = gtk.StatusIcon()
        self.staticon.set_from_stock(gtk.STOCK_INDEX)
        self.staticon.set_visible(True)
        self.staticon.connect('activate', self.browser(output_text = 'text'))
        gtk.main()

    def browser(self, window, output_text):
        browser = gtk.Window()
        browser.set_usize(600, 500)
        textbox = gtk.TextView()
        text = gtk.TextBuffer()
        text.set_text(output_text)
        textbox.set_buffer(text)
        browser.add(textbox)
        browser.show_all()        

if __name__ == '__main__':
    PyPPrinter()

这段代码给了我一个例外:TypeError: browser() takes exactly 3 arguments (2 given). 也许我也应该为参数传递一个值window,但它应该是什么?

4

1 回答 1

2

两种变体:

更改连接部分:

self.staticon.connect('activate', self.browser(output_text = 'text'))

到:

self.staticon.connect('activate', self.browser, 'text')

或更改处理程序签名:

def browser(self, window, output_text):

到:

def browser(self, window):
于 2012-01-29T14:31:33.893 回答