我正在编写一个 Python GTK 应用程序来研究某种数学数据。主脚本只有一个类,只有三个方法:__INIT__
、 main(self) 用于启动循环和 delete_event 用于终止循环。
__INIT__
创建 GUI,其中包括 TextBuffer 和 TextView 小部件,以便分析函数(在单独的 functions.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 定义的消息区域。
现在,方法函数中的一个函数检查数据库是否是最新的,如果不是,则要求用户加载一批新的原始数据。
这样做的一种方法是包含一个触发该功能的菜单项,如下所示:
item_dataCheck.connect("激活", functions.data_check, '')
functions.data_check
运行良好,但是当它尝试将其输出写入 self.logbuffer 时,会引发错误,抱怨菜单项item_dataCheck
没有属性logbuffer
。违规代码是
enditer = self.logbuffer.get_end_iter()
self.logbuffer.insert(enditer, 'Please update the database.')
显然,名称 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 程序,所以我可以指望一些社区的仁慈......)