如何从modu中的函数中引用基本实例pythongtk小部件

2024-06-08 19:42:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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。违规代码是

^{pr2}$

显然,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程序,这样我就可以指望社区的仁慈了……)


Tags: 数据方法self消息gtkdatamainfunctions
1条回答
网友
1楼 · 发布于 2024-06-08 19:42:41

在将信号连接到函数或方法时,可以提供其他参数。因此,处理程序functions.data_check可以接受self之外的额外参数:

def data_check(self, logbuffer):
    # ...

然后,您可以connect with arguments

^{pr2}$

另外,self参数通常用作方法定义中的第一个参数。这是一个非常强的约定,所以应该使用obj或类似的东西。特别是因为你的信号处理程序也可能是方法;在这种情况下,你可能会用它的参数搞乱它。在

相关问题 更多 >