2017-05-06 66 views
3

嘗試使用類創建GUI,並且一直存在此錯誤的問題。我不確定這是什麼意思,因爲我只有一個班就我所看到的,我的錯誤是:TypeError:元類衝突:派生類的元類必須是其所有基類元類的(非嚴格)子類

Traceback (most recent call last): 
File "C:/Users/Blaine/Desktop/Computing Project.py", line 5, in <module> 
class SneakerSeeker(tk,Frame): 
TypeError: metaclass conflict: the metaclass of a derived class must be a 
(non-strict) subclass of the metaclasses of all its bases 

我的代碼是:

from tkinter import * 
import tkinter as tk 
import tkinter.messagebox as tm 

class Number1(tk,Frame): 
    def __init__(self, master): 
     super(Number1, self).__init__() 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.TopTitle = Label("Number1", font = ('Calibri ', 16)) 
     self.TopTitle.pack() 


def main(): 
    root = tk.Tk() 
    root.title("Number 1") 
    app = Number1(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

回答

1

我想評論你,但也有很多東西說:

所有的
  • 首先,從Tkinter的進口*擺脫和寫import tkinter as tk代替(如布萊恩在這裏寫了很多次)。除此之外,在相同的應用程序中編碼from tkinter import *import tkinter as tk的目的是什麼?當你這樣做,你的所有控件類必須tktk.Label(...)tk.Frame(...) ...)

  • class Number1(tk,Frame)被先例,你應該寫tk.Frame(或簡稱Frame,如果你把你的進口,因爲他們是)

  • 您在super(Number1, self).__init__()處使用不必要的super()。請點擊這裏閱讀布萊恩的回答:Best way to structure a tkinter application,並以此替換該行:tk.Frame.__init__(self, master)(對於未來,採取在考慮Python's Super is nifty, but you can't use it

  • 對此行:self.TopTitle = Label("Number1", font = ('Calibri ', 16)):第一個選項傳遞給tk.Label()(及任何您將創建其他widget)是父控件:在你的情況,self.master

  • 我找到相關self.TopTitle無用的2線,我不明白你正在努力實現與他們(除了什麼,你不應該命名該標籤;請尊重PEP 8如果您想加入Python部門)