2016-12-02 15 views
0

私の継承構造に問題があることを意味する例外が発生していますが、問題を把握することはできません。tkinterを使用するとクラス継承の問題

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

これはexcpetionを与える:

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 

だから私はPeriodから属性を継承するGame、およびPeriodSummaryから属性を継承するPeriodを持っていると思います。なぜこれはできないのですか?

+1

継承の仕組みについて根本的な誤解があるようです。 'PeriodSummary'が他のクラスから継承する必要があるのはなぜですか?なぜ、ゲームの一部ではなく、「期間」も「ゲーム」ですか?あなたはそれが達成したと思いますか? –

+0

'ゲーム'には多くの '期間'があります。それぞれの期間がプレイされた後、私は 'PeriodSummary'フレームが来るようにしたいと思います。 'Period'は' Game'から属性を必要とするため継承しますが、属性も異なります。 – splinter

+0

ちょうどあなたが書いたものを読んでください:ゲームには多くの期間があります。各期間はあなたの遺産が言っているゲームではありません。 1つの 'Game'オブジェクトは、いくつかの' Period'オブジェクトを属性として持つべきです。継承を使用したくないのは、データを共有する必要があるという理由だけです。これは継承の目的ではありません。 –

答えて

2

FrameTkの両方を継承しないでください。それらは非常に異なるものであり、両方から継承することは、期待どおりに機能しません。さらに、tknterアプリは常にTkという単一インスタンスしか持たないはずです。

また、Frameと、Frameから継承する他のクラスから継承しないでください。

+0

しかし、なぜそれは動作しませんか?私が調整できるものはありますか? – splinter

+1

@splinter:動作するように設計されていないため動作しません。これは単にtkinterを使用する間違った方法です。オブジェクトは、同時にフレームとルートウィンドウの両方になることはできません。 –