2016-12-02 3 views
0

상속 구조에 문제가 있음을 의미하는 예외가 발생하지만 문제를 파악할 수 없습니다. tkinter를 사용할 때 클래스 상속 문제

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 

그래서 내가 Game에서 속성을 상속 Period을 갖고 싶어하고, PeriodSummaryPeriod에서 속성을 상속 :
import tkinter as tk 
class Game(tk.Tk): 
class Period(tk.Frame, Game): 
class PeriodSummary(tk.Frame,Period): 

은 excpetion을 제공합니다. 왜 이것이 가능하지 않습니까?

+1

상속이 어떻게 작동하는지에 대한 근본적인 오해가있는 것처럼 보입니다. 왜 'PeriodSummary'는 다른 클래스로부터 상속해야합니까? 왜 '기간'은 게임의 일부가 아닌 '게임'입니까? 그것이 성취했다고 생각합니까? –

+0

'게임 '에는'기간 '이 많이 있습니다. 각 기간이 끝난 후에는 'PeriodSummary'프레임이 나타나기를 바랍니다. 'Period'는 게임에서 속성을 필요로하기 때문에'Game'에서 상속 받지만 속성은 다릅니다. – splinter

+0

방금 ​​쓴 내용을 읽으십시오 : 게임은 많은 시간을 보냈습니다. 각 기간은 상속이 말하는 게임이기도합니다. 하나의'Game' 객체는 속성으로서 여러 개의'Period' 객체를 가져야합니다. 상속을 사용하지 않기 때문에 데이터를 공유해야하기 때문에 상속을 사용하지 않으려 고합니다. –

답변

2

FrameTk 모두를 상속 받아서는 안됩니다. 그것들은 매우 다른 것들이며, 둘 모두로부터 상속받는 것은 당신이 기대하는대로 단순히 작동하지 않을 것입니다. 또한, tknter 앱은 항상 Tk의 단일 인스턴스 만 가져야합니다.

또한 FrameFrame에서 상속하는 다른 클래스를 상속하면 안됩니다.

+0

하지만 왜 작동하지 않습니까? 내가 조정할 수있는 것이 있습니까? – splinter

+1

@splinter : 작동하도록 설계되지 않았기 때문에 작동하지 않습니다. 이것은 단순히 tkinter를 사용하는 잘못된 방법 일뿐입니다. 객체는 동시에 프레임과 루트 윈도우가 될 수 없습니다. –