Python在其他对象中的集成

背书

修复:我将单选按钮的调用从视图的初始位置移到了控制器,如下所示:

class Controller(object):
    def __init__(self):
        self.model = Model()
        print('start init of View')
        self.view = View(self.importieren, self.exportieren, self.beenden, self.J5, self.J6, self.J7, self.J8, self.J9,
                         self.J10, self.J11, self.J12, self.JA, self.tabelle_sorti, self.hinzufugen, self.zuordnen,
                         self.ande, self.JA, self.model.ausgabe('projekte'), self.tabelle_update, self.a1, self.a2, self.a3,
                         self.a4, self.a5, self.a6, self.a7)
        print('done init')
        self.wahlen = ('sErst', 'sZweit', 'sDritt')
        self.delimiter = {'imp_s': None, 'imp_p': None, 'exp': None}
        self.dchosen = None
        self.slcsv = 'schuelerliste.csv'
        self.plcsv = 'projektliste.csv'
        self.double = False
        self.andernx = ""

        self.view.radios['jahrg-Alle'].invoke()
        self.tabelle()
        self.view.table['main'].bind('<Double-Button-1>', self.treevent)
        # Erstimportierung
        if self.model.ausgabe('schueler'):
            self.importieren(True)

        self.view.mainloop()


    def tabelle_update(self, fetchshlr=None, fetchprj=None):
        print('start update')
        if fetchshlr is None:
            fetchshlr = self.model.ausgabe('schueler')
        if fetchprj is None:
            fetchprj = self.model.ausgabe('projekte')

        self.view.tableup(fetchshlr, fetchprj)

在View准备就绪之前,此调用称为函数,因此导致了错误。感谢您的帮助,
我尝试不问任何问题,但是经过数小时的搜索,我不得不这样做。我目前正在编写程序,最近将主文件按照MVC方案的样式分为三个部分。我有一个功能来更新作为表工作的Treeview。但是这个功能(只有那个!)说:

Exception in Tkinter callback\
Traceback (most recent call last):\
  File "C:\Users\...\Python38\lib\tkinter\__init__.py", line 1883, in __call__\
    return self.func(*args)\
  File "C:/Users/.../Controller.py", line 184, in tabelle_update\
    self.view.table['main'].tag_configure(i[0], background='white')\
AttributeError: 'Controller' object has no attribute 'view'

我已经尝试过使用lambda(如果您问为什么,因为有人在互联网上说过),它根本无法使用该功能。我也认为这与此有关:

{'model': <Model.Model object at 0x0000018CA8068160>, 'view': <View.View object .>, ...}

这是字典属性的摘录,我认为它与0x处的缺失有关...在“视图”中的一部分(如在“模型”中所见)
请帮助我启动并运行

这是我重要的代码部分(如果需要,请写),请
注意,diffrent类位于diffrent文件中,并且已正确导入

在tabelle_update和View类表格下的programmcode中,我尝试将View的重要部分移至View,但未进行任何重大更改

class Controller(object):
    def __init__(self):
        self.model = Model()
        self.view = View(self.importieren, self.exportieren, self.beenden, self.J5, self.J6, self.J7, self.J8, self.J9,
                         self.J10, self.J11, self.J12, self.tabelle_update, self.tabelle_sorti, self.hinzufugen,
                         self.zuordnen, self.ande, self.tabelle_update, self.model.ausgabe('projekte'),
                         self.tabelle_update, self.a1, self.a2, self.a3, self.a4, self.a5, self.a6, self.a7)
        self.wahlen = ('sErst', 'sZweit', 'sDritt')
        self.delimiter = {'imp_s': None, 'imp_p': None, 'exp': None}
        self.dchosen = None
        self.slcsv = 'schuelerliste.csv'
        self.plcsv = 'projektliste.csv'
        self.double = False
        self.andernx = ""

        self.tabelle()
        self.view.table['main'].bind('<Double-Button-1>', self.treevent)
        # Erstimportierung
        if self.model.ausgabe('schueler'):
            self.importieren(True)

        print(self.__dict__)

        self.view.mainloop()
    
    def tabelle(self):
        fetch = self.model.ausgabe('schueler')
        self.view.shlr_tabelle(fetch)

    def tabelle_update(self, fetchshlr=None, fetchprj=None):
        print('start update')
        if fetchshlr is None:
            fetchshlr = self.model.ausgabe('schueler')
        if fetchprj is None:
            fetchprj = self.model.ausgabe('projekte')

        self.view.tableup(fetchshlr, fetchprj)

class View(ttkthemes.ThemedTk):
    def __init__(self, imp, exp, bee, j5, j6, j7, j8, j9, j10, j11, j12, ja, tabsort, hin, zord, ande, scht,
                 prjt, aktutable, a1, a2, a3, a4, a5, a6, a7):
        # print(ttkthemes.THEMES)   # zum Ausgeben der verfügbaren Themes
        ttkthemes.ThemedTk.__init__(self, theme='breeze')
        self.title("Projektwochenverwaltungsprogramm")
        self.geometry('800x300')
        self.minsize(800, 300)
        self.resizable(width=True, height=True)

        # bestimmen der Callbacks
        self.callback_imp = imp
        self.callback_exp = exp
        self.callback_bee = bee
        self.radiocom = {'jahrg': [j5, j6, j7, j8, j9, j10, j11, j12, ja], 'ande': [a1, a2, a3, a4, a5, a6, a7]}
        self.tabelle_sorti = tabsort
        self.callback_aktut = aktutable
        self.callback_zord = zord
        self.callback_hin = hin
        self.callback_ande = ande
        self.callback_scht = scht
        self.callback_prjt = prjt


        # Tabelle
        self.scrollbars = {'main': Scrollbar(self.rahmen[2], orient="vertical")}
        self.table = {'main': Treeview(self.rahmen[2], yscrollcommand=self.scrollbars['main'].set, height=200)}
        self.scrollbars['main'].pack(side=RIGHT, fill=BOTH)

        self.rahmen[1].pack()
        self.rahmen['popup_pro'].pack(fill=X)
        self.rahmen[2].pack(fill=BOTH, expand=True)


    def shlr_tabelle(self, fetch):
        ml = ['ID']
        for name in self.names['schueler']:
            ml.append(name)
        ml.append('Zugeordned zu')
        self.table['main']['columns'] = ml
        self.table['main']['show'] = 'headings'
        for i in range(len(ml)):
            self.table['main'].column(ml[i], width=self.width['schueler'][i], minwidth=self.width['schueler'][i])
        for i in range(len(ml)):
            self.table['main'].heading(ml[i], text=ml[i], command=lambda col=i: self.tabelle_sorti(col, False, 'main'))
        for t in fetch:
            self.table['main'].insert('', t[0], t[0], values=t)  # , tags=t[0]
        self.scrollbars['main'].config(command=self.table['main'].yview)
        self.table['main'].pack(fill=BOTH)

    def prj_tabelle(self, fetch):
        self.top['prjt'] = Toplevel()
        self.top['prjt'].title('Projekte Liste')
        self.top['prjt'].geometry('800x300')
        self.top['prjt'].minsize(800, 300)
        self.scrollbars['prj'] = Scrollbar(self.top['prjt'], orient="vertical")
        self.table['prj'] = Treeview(self.top['prjt'], yscrollcommand=self.scrollbars['prj'].set, height=200)

        ml = ['ID']
        for name in self.names['projekte']:
            ml.append(name)
        self.table['prj']['columns'] = ml
        self.table['prj']['show'] = 'headings'
        for i in range(len(ml)):
            self.table['prj'].column(ml[i], width=self.width['projekte'][i], minwidth=self.width['projekte'][i])
        for i in range(len(ml)):
            self.table['prj'].heading(ml[i], text=ml[i], command=lambda col=i: self.tabelle_sorti(col, False, 'prj'))
        for t in fetch:
            self.table['prj'].insert('', t[0], t[0], values=t)  # , tags=t[0]
        self.scrollbars['prj'].config(command=self.table['prj'].yview)
        self.scrollbars['prj'].pack(side=RIGHT, fill=BOTH)
        self.table['prj'].pack(fill=BOTH)

    def tableup(self, fetchshlr, fetchprj):
        print('läuft')
        for i in fetchshlr:
            self.view.table['main'].tag_configure(i[0], background='white')
        self.view.table['main'].delete(*self.view.table['main'].get_children())

        for t in fetchshlr:
            self.view.table['main'].insert('', t[0], t[0], values=t)  # , tags=t[0]

        for ele in fetchshlr:
            if ele[8] is None:
                self.view.table['main'].tag_configure(ele[0], background='#fa6150')

        try:
            for i in fetchprj:
                self.view.table['prj'].tag_configure(i[0], background='white')
            self.view.table['prj'].delete(*self.view.table['prj'].get_children())

            for t in fetchprj:
                self.view.table['prj'].insert('', t[0], t[0], values=t)  # , tags=t[0]

            failed = self.model.prj_aktu()
            for prj in failed:
                self.view.table['prj'].tag_configure(prj, background='#fa6150')
        except KeyError:
            pass
布莱恩·奥克利(Bryan Oakley)

您必须问问自己何时self.view完全初始化,以及何时尝试访问self.view该错误告诉您在定义它之前您正在尝试访问它。

您应该能够通过添加如下打印语句来形象地看到这一点:

print("before self.view is defined")
self.view = View(...)
print("after self.view is defined")

接着:

print("using self.view...")
self.view.table['main'].tag_configure(i[0], background='white')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对象的属性未在其他对象中显示

来自分类Dev

让对象检测是否完全在其他对象JavaScript中

来自分类Dev

php对象交互-在其他实例中调用实例

来自分类Dev

如何存储对在其他线程中设置的对象的引用?

来自分类Dev

MongoDB 在其他字段中插入自己的对象 ID

来自分类Dev

如何在其他函数中引用类对象?

来自分类Dev

嵌套在其他对象中的方法是如何存储的?

来自分类Dev

如何在其他函数中引用对象?

来自分类Dev

Python中包含其他对象的对象

来自分类Dev

Flutter:如何在其他对象的字幕中添加其他值

来自分类Dev

查找在其他模块中定义的变量(python)

来自分类Dev

如何在其他目录中执行python脚本?

来自分类Dev

Python Tkinter变量未在其他线程中更新

来自分类Dev

Python:在其他目录中打开json文件?

来自分类Dev

在其他在python中完成之前运行命令

来自分类Dev

[Python]在其他函数中调用的数组函数

来自分类Dev

在其他文件中将Qt窗口小部件引用到其他Python类中

来自分类Dev

使用内置API检查文字对象是否包含在其他对象中

来自分类Java

使用休眠将一个对象保存在其他多个对象中

来自分类Dev

在其他JSON对象Flutter中获取一个JSON List对象

来自分类Dev

如果在其他两个类中不存在新对象,如何在Python Django中创建一个新对象?

来自分类Dev

包对象中定义的Val在其他类中无法访问

来自分类Java

从Java中的ArrayList中删除在其他类中使用的对象

来自分类Dev

如何使用我在其他类中的 Startup 类中构建的 IConfiguration 对象?

来自分类Dev

在其他方法/函数中的构造函数中调用对象

来自分类Dev

在其他文件中更改其他类的标签

来自分类Dev

在其他函数中定义函数

来自分类Dev

在其他列表中搜索列表

来自分类Dev

使变量在其他函数中可用

Related 相关文章

  1. 1

    对象的属性未在其他对象中显示

  2. 2

    让对象检测是否完全在其他对象JavaScript中

  3. 3

    php对象交互-在其他实例中调用实例

  4. 4

    如何存储对在其他线程中设置的对象的引用?

  5. 5

    MongoDB 在其他字段中插入自己的对象 ID

  6. 6

    如何在其他函数中引用类对象?

  7. 7

    嵌套在其他对象中的方法是如何存储的?

  8. 8

    如何在其他函数中引用对象?

  9. 9

    Python中包含其他对象的对象

  10. 10

    Flutter:如何在其他对象的字幕中添加其他值

  11. 11

    查找在其他模块中定义的变量(python)

  12. 12

    如何在其他目录中执行python脚本?

  13. 13

    Python Tkinter变量未在其他线程中更新

  14. 14

    Python:在其他目录中打开json文件?

  15. 15

    在其他在python中完成之前运行命令

  16. 16

    [Python]在其他函数中调用的数组函数

  17. 17

    在其他文件中将Qt窗口小部件引用到其他Python类中

  18. 18

    使用内置API检查文字对象是否包含在其他对象中

  19. 19

    使用休眠将一个对象保存在其他多个对象中

  20. 20

    在其他JSON对象Flutter中获取一个JSON List对象

  21. 21

    如果在其他两个类中不存在新对象,如何在Python Django中创建一个新对象?

  22. 22

    包对象中定义的Val在其他类中无法访问

  23. 23

    从Java中的ArrayList中删除在其他类中使用的对象

  24. 24

    如何使用我在其他类中的 Startup 类中构建的 IConfiguration 对象?

  25. 25

    在其他方法/函数中的构造函数中调用对象

  26. 26

    在其他文件中更改其他类的标签

  27. 27

    在其他函数中定义函数

  28. 28

    在其他列表中搜索列表

  29. 29

    使变量在其他函数中可用

热门标签

归档