将数据从一个类传递到另一个类

2024-04-26 00:19:44 发布

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

我知道这个问题在这里被问了好几次,相信我,在把我的问题贴到这里之前,我已经读了很多。但我还没有解决我的问题。因此,任何帮助都将不胜感激。你知道吗

首先,这涉及4个不同类中的4个函数(在单独的文件中,使用import访问,这不是关注点)。你知道吗

以下是所涉及函数的scriptlet:

主程序

class MyWindow(Gtk.Window):
    def __init__(self):
        MenuElem = menu.MenuManager()
        TreeView = view.treeview()

        grid.attach(TreeView.view, 30, 0, 25, 21) #defined properly, 
                                                  #just not shown for bravity

菜单管理器模块(显然在菜单.py)

import pybib
import view
class MenuManager(Gtk.UIManager):
    def __init__(self):
        self.parsing = pybib.parser()
        self.TreeView = view.treeview()

    def file_open_clicked(self, widget):
            filename = dialog.get_filename()
            self.parsing.parsing_read(filename)

            ####### HERE I NEED TO CALL VIEW.PY
            ## AND ATTACH IT TO THE GRID.ATTACH LINE
            ## iN MAIN.PY######
            ##e.g. self.Treeview()

那个pybib.语法分析器是相当小的代码,而且应该将参数作为输入和输出,所以请允许我完整地发布:

class parser():
    # def __init__(self):
        def parsing_read(self, filename):
            import bibtexparser
            from bibtexparser.bparser import BibTexParser
            # from bibtexparser.bwriter import BibTexWriter
            from bibtexparser.bibdatabase import BibDatabase
            db = BibDatabase()
            with open(filename) as bibtex_file:
                parser = BibTexParser()
                db = bibtexparser.load(bibtex_file, parser=parser)
                for i in range(0, len(db.entries)):
                    tuples = (i+1, db.entries[i].get("title"),
                              db.entries[i].get("author"),
                              db.entries[i].get("journal"),
                              db.entries[i].get("year"))
                    print(tuples)
                    #booklist.append(tuples) I should be able to pass the 
                    #booklist to view somehow

现在,最后是视图.py

class treeview():
    def __init__(self):
        #booklist = [] should take the booklist created by pybib
        self.bookstore = Gtk.ListStore(int, str, str, str, str)
        for ref in booklist:
            self.bookstore.append(list(ref))
        self.current_filter_language = None
        self.view = Gtk.TreeView(model=self.bookstore)
        for i, column_title in enumerate(["Index", "Title", "Author",
                                          "Publishers", "Year"]):
            renderer = Gtk.CellRendererText()
            renderer.set_property("wrap-width", 400)
            if i > 2:
                renderer.set_property("wrap-width", 150)
            renderer.set_property("wrap-mode", 0)
            column = Gtk.TreeViewColumn(column_title, renderer, text=i)
            self.view.append_column(column)
        print("view working")

我已经检查了个别代码工作正常,但不能通过数据正确。根据我的理解,我将scriptlet保持得尽可能小。你知道吗

我应该提到的是,我在python方面的经验仅限于在单个文件中编写脚本,这是我第一次真正做oop。你知道吗

请帮忙。你知道吗


Tags: importselfviewparsergtkdbgetdef