6

を使用して Tkinter ウィンドウを作成しようとしていますsuper()。次のエラーが表示されます。

TypeError: super() argument 1 must be type, not classobj

コード:

import Tkinter as tk

class Application(tk.Frame):

    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()


def main():
    root = tk.Tk()
    root.geometry('200x150')
    app = Application(root)

    root.mainloop()

main()
4

2 に答える 2

11

Tkinterが古いスタイルのクラスを使用していることは事実ですが、この制限は(Python の多重継承を使用して)Applicationからサブクラスをさらに派生させることで克服できます。object

import Tkinter as tk

class Application(tk.Frame, object):

    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()

def main():
    root = tk.Tk()
    root.geometry('200x150')
    app = Application(root)

    root.mainloop()

main()

これは、Tkinter クラスが動作するために古いスタイルのクラスである必要がある動作を試みない限り動作します (そうなるとは思えません)。上記の例を Python 2.7.7 で問題なくテストしました。

この回避策はここで提案されました。この動作は、デフォルトで Python 3 にも含まれています (リンクで参照)。

于 2014-10-15T00:39:35.930 に答える
3

Tkinter古いスタイルのクラスを使用します。新しいスタイルのクラスsuper()でのみ使用できます。

于 2013-08-11T11:16:20.927 に答える