2016-12-02 89 views
0

我收到一個異常,這意味着我的繼承結構有問題,但無法找出問題所在。使用tkinter時的類繼承問題

import tkinter as tk 
class Game(tk.Tk): 
class Period(tk.Frame, Game): 
class PeriodSummary(tk.Frame,Period): 

這給了錯誤時拋出:

Traceback (most recent call last): 
    File "tkinter_test.py", line 4, in <module> 
    class PeriodSummary(tk.Frame,Period): 
TypeError: Cannot create a consistent method resolution 
order (MRO) for bases Frame, Period 

所以我想有PeriodGame繼承屬性,PeriodSummaryPeriod繼承屬性。爲什麼這是不可能的?

+1

看起來你對繼承的工作原理有一個根本性的誤解。爲什麼'PeriodSummary'需要從這些其他類繼承?爲什麼「週期」也是「遊戲」而不是遊戲的一部分?你認爲完成了什麼? –

+0

「遊戲」有很多'期間'。在每個階段結束後,我希望有一個'PeriodSummary'框架出現。 「週期」從「遊戲」繼承,因爲它需要屬性,但也有不同的屬性。 – splinter

+0

閱讀你剛剛寫的:一個遊戲_has_很多時期。每個時期也不是一場比賽,這就是你的繼承所說的。一個'Game'對象應該有多個'Period'對象作爲屬性。你不想僅僅因爲需要共享數據而使用繼承,那不是繼承。 –

回答

2

您不應該從FrameTk繼承。這些是非常不同的東西,從兩者繼承根本不會像你期望的那樣工作。此外,tknter應用程序應始終只有一個Tk的實例。

你也不應該繼承自Frame,也不應該繼承自Frame繼承的其他類。

+0

但爲什麼它不起作用?有什麼我可以調整的嗎? – splinter

+1

@splinter:它不工作,因爲它沒有設計工作。這只是使用tkinter的錯誤方法。一個對象不能同時是一個框架和一個根窗口。 –