PyGTK. 如何在状态图标左键单击时在窗口的TextView小部件中显示文本

2 投票
1 回答
1574 浏览
提问于 2025-04-17 11:53

我有一个小的PyGTK程序,里面有一个状态图标。当我左键点击这个状态图标时,应该弹出一个窗口,窗口里有一个文本视图(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参数传一个值,但这个值应该是什么呢?

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):

撰写回答