我正在编写一个pythongtk应用程序来研究某种数学数据。主脚本只有一个类,只有三个方法:__INIT__
,main(self)用于启动循环,delete\u event用于终止循环。在
__INIT__
创建GUI,其中包括TextBuffer和TextView小部件,以便分析功能(定义在单独的函数.py模块)可以将结果输出到公共日志/消息区域。相关摘录如下:
include module functions(.py)
(...)
class TURING:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
(...)
self.logscroll = gtk.ScrolledWindow()
self.logscroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.logbuffer = gtk.TextBuffer()
self.logpage = gtk.TextView(self.logbuffer)
self.logpage.set_editable(gtk.FALSE)
self.logpage.set_cursor_visible(gtk.FALSE)
self.logpage.set_wrap_mode(gtk.WRAP_CHAR)
self.logscroll.add(self.logpage)
self.logscroll.show()
self.logpage.show()
(...)
enditer = self.logbuffer.get_end_iter()
self.logbuffer.insert(enditer, 'Welcome!')
(...)
def main(self):
gtk.main()
if __name__ == "__main__":
turing = TURING()
turing.main()
中间的两行成功地将欢迎消息打印到由定义的消息区域self.logpage页面. 在
现在,methodfunctions中的一个函数检查数据库是否是最新的,如果不是,则要求用户加载一批新的原始数据。在
一种方法是包含一个触发该功能的菜单项,如下所示:
项目_数据检查.connect(“激活”,functions.data_检查,'')
functions.data_check
在尝试将其输出写入时运行良好self.logbuffer抛出错误,抱怨菜单项item_dataCheck
没有属性logbuffer
。违规代码是
显然,self这个名称表示调用函数的小部件,即item_dataCheck
。我的问题是如何从functions.data_check
直接引用logbuffer
作为TURING
类的turing
实例的成员。我试着写
enditer = turing.logbuffer.get_end_iter()
turing.logbuffer.insert(enditer, 'Please update the database.')
但这不管用。我努力寻找解决办法,但没有成功。在
我相信这件事很简单,我知道我在Python和OOP方面还有一些严重的概念性问题,但是如果有任何帮助,我们将不胜感激。(我在Burroughs主机上开始使用打卡Fortran程序,这样我就可以指望社区的仁慈了……)
在将信号连接到函数或方法时,可以提供其他参数。因此,处理程序
functions.data_check
可以接受self
之外的额外参数:然后,您可以connect with arguments:
^{pr2}$另外,
self
参数通常用作方法定义中的第一个参数。这是一个非常强的约定,所以应该使用obj
或类似的东西。特别是因为你的信号处理程序也可能是方法;在这种情况下,你可能会用它的参数搞乱它。在相关问题 更多 >
编程相关推荐