2016-12-02 8 views
0

Ich erhalte eine Ausnahme, die ein Problem mit meiner Vererbungsstruktur impliziert, kann aber das Problem nicht herausfinden.Klassenvererbungsproblem bei der Verwendung von tkinter

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

Dies gibt dem 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 

Deshalb möchte ich Period haben Attribute von Game zu erben, und PeriodSummary Attribute von Period zu erben. Warum ist das nicht möglich?

+1

Es sieht so aus, als ob Sie ein grundlegendes Missverständnis haben, wie Vererbung funktioniert. Warum muss 'PeriodSummary' von diesen anderen Klassen erben? Warum ist eine "Periode" auch ein "Spiel", anstatt Teil eines Spiels zu sein? Was glaubst du, was das bewirkt? –

+0

Ein 'Spiel' hat viele' Perioden'. Nachdem jede Periode gespielt wurde, möchte ich, dass dort ein 'PeriodSummary'-Frame erscheint. 'Periode' erbt von' Spiel', weil es Attribute benötigt, aber auch unterschiedliche Attribute hat. – splinter

+0

Lesen Sie, was Sie gerade geschrieben haben: ein Spiel _has_ viele Perioden. Jede Periode ist kein _also_ ein Spiel, was dein Erbe sagt. Ein "Game" -Objekt sollte mehrere "Period" -Objekte als Attribute haben. Sie möchten die Vererbung nicht verwenden, nur weil Sie Daten gemeinsam nutzen müssen. –

Antwort

2

Sie sollten nicht von Frame und Tk erben. Das sind sehr unterschiedliche Dinge, und das Erben von beiden wird einfach nicht so funktionieren, wie Sie es erwarten. Plus, sollte eine tknter App immer nur eine einzige Instanz von Tk haben.

Sie sollten auch nicht von Frame erben und auch von einer anderen Klasse, die von Frame erbt.

+0

Aber warum funktioniert es nicht? Kann ich etwas anpassen? – splinter

+1

@Splinter: Es funktioniert nicht, weil es nicht funktioniert. Dies ist einfach der falsche Weg, tkinter zu verwenden. Ein Objekt kann nicht gleichzeitig ein Rahmen- und ein Stammfenster sein. –

Verwandte Themen