-1

私はまだpythonを学んでいるので、問題が発生しました。

なぜこれが機能するのですか:

class SomeOtherClass(object):
    def __init__(self):
        self.number = 10
        print(self.number)

    def increase(self):
        self.number += 1
        print(self.number)

class MyMainClass(object):
    def __init__(self):
        self.otherClass = MyClass()

app = MyMainClass() #Output: 10
app.otherclass.increase() #Output: 11

しかし、これはしません:

from tkinter import *

class MyMainClass(object):
    def __init__(self):
        self.tk = Tkinter() # <-- Error: see below.

app = MyMainClass()
app.tk.title("My window")
...

どちらの場合もクラスを含めますが、2 番目の例では次のように述べています。

NameError: グローバル名 'Tkinter' が定義されていません

これらの例の違いはどこにあり、どうすればこれを解決できるので、クラスで tkinter を使用できますか?

ご協力いただきありがとうございます。

4

1 に答える 1

5

おそらくあなたは意味しましたTk()か?Python 3.xのtkinterモジュールにはクラスが含まれていないようですTkinter

あなたの質問と例の意味については...まあ、例はまったく無関係であり、質問は単に「なぜインスタンスを作成できないのかTkinter」などです。

Python の教訓:これは、スターのインポートを使用することがなぜ悪い考えなのか (つまりfrom <module> import **スターのように見えるから) の良い例でもあります。これは からすべてをインポートしtkinterますが、あると思っていたものが実際にないかどうかはわかりません

from tkinter import *

一方、これは

from tkinter import Tkinter

Tkinter(クラス)が に存在しないことをすぐに指摘したでしょうtkinter。一部の人が好むと思われる別のオプション (場合によっては私自身も含む) の後に がimport tkinter続きます。tkinter.Tk()これには、クラスがどこから来たのかが明らかであるという利点があります。さらに、PEP8はまた、スター インポートの使用を思いとどまらせます (それらを「ワイルドカード インポート」と呼びます)。

于 2013-10-02T15:47:01.983 に答える