0

これは私のコードです:

    print '1'
from Tkinter import *
print '2'
class myApp:

    print '3'
    def __init__(self,parent):
        print '4'

##        self.myparent = parent    line1
        print '11'

        self.myContainer1 = Frame(parent)
        print '12'
        self.myContainer1.pack()
        print '13'

        self.button1 = Button(self.myContainer1,text="OK",background="green")
        print '14'
        self.button1.pack(side=LEFT)
        print '15'
        self.button1.bind("<Button-1>",self.button1Click)
        print '16'

        self.button2 = Button(self.myContainer1,text="Cancel",background="cyan")
        print '17'
        self.button2.pack(side=RIGHT)
        print '18'
        self.button2.bind("<Button-1>",self.button2Click)
        print '19'


    def button1Click(self,event):

            print '5'

            if self.button1['background'] == 'green':
                print '20'
                self.button1['background'] ='tan'
                print '21'

            else:

                print '22'

                self.button1['background'] = 'yellow'

                print '23'

    def button2Click(self,event):

            print '6'

##            self.myparent.destroy()

            self.parent.destroy()

print '7'
root = Tk()
print '8'
myapp = myApp(root)
print '9'
root.mainloop()
print '10'

エラーは:

    >>> ================================ RESTART ================================
>>> 
1
2
3
7
8
4
11
12
13
14
15
16
17
18
19
9
5
20
21
5
22
23
6
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1403, in __call__
    return self.func(*args)
  File "C:\Documents and Settings\he00044.HALEDGEWOOD\Desktop\TkinterExamples\buttonBind.py", line 56, in button2Click
    self.parent.destroy()
AttributeError: myApp instance has no attribute 'parent'
10
>>> 

これは私がline1にコメントするときです

myappが親を見つけていない可能性があります。

しかし、その概念は明確ではありません。

誰でもコンセプトを詳しく説明できますか…。

4

4 に答える 4

2

言及しているこれらの 2 行をコメントアウトしてself.myparent、神秘的で初期化されていないことを言及している新しい行を作成したのはなぜself.parentですか?! もちろん、それがあなたの問題の始まりです-ばかげた、意図的なコードの妨害のように見えます。

于 2009-07-03T06:23:14.433 に答える
0

あなたの質問はtkinterに関連するものではなく、むしろオブジェクト指向デザインに関するものです。

クラスmyAppには、 __ init__メソッド(コンストラクター、そのクラスのオブジェクトが作成されたときに実行されるメソッド)と、ボタンクリック用の2つのメソッドがあります。button2Clickメソッドで、属性self.parent(myapp.parentとして変換)を読み取ろうとしましたが、このプロパティは定義されていません。

1行目のコメントを解除しても、エラーは発生しません。これは、属性myapp.parentを作成していて、Tkルートウィジェットをこの属性に割り当てているためです。作成するすべてのウィジェットは親ウィジェットを受け取る必要があるため、これが必要です。

于 2009-07-03T07:25:15.590 に答える
0

これまでの他の回答は素晴らしいです。
これも役立つかもしれません: Fredrik Lundh's intro to Tkinter .

他の回答とともに、コードにいくつかのコメントを追加すると、再び動き出すのに役立ちます。

import Tkinter

class MyApp:
    def __init__(self, parent): # constructor
        self.parent = parent # the parent here is 'root'
        self.myContainer1 = Tkinter.Frame(self.parent) # create Frame w/ root as parent
        self.myContainer1.pack() # make Frame (myContainer1) visible
        self.button1 = Tkinter.Button(self.myContainer1, 
                        text="OK", background="green") # add button as child of Frame
        self.button1.pack(side=Tkinter.LEFT) # place button1 in Frame
        self.button1.bind("<Button-1>",self.button1Click) # bind left mouse button to button1Click method
        self.button2 = Tkinter.Button(self.myContainer1, text="Cancel", 
                        background="cyan")
        self.button2.pack(side=Tkinter.RIGHT)
        self.button2.bind("<Button-1>", self.button2Click)

    def button1Click(self, event):
        if self.button1['background'] == 'green':
            self.button1['background'] ='tan'
        else:
            self.button1['background'] = 'yellow'

    def button2Click(self, event):
        self.parent.destroy() # the parent here is 'root', so you're ending the event loop

root = Tkinter.Tk()     # create root widget (a window)
myapp = MyApp(root)     # create instance of MyApp with root as the parent
root.mainloop()         # create event loop (ends when window is closed)
于 2009-07-03T07:58:40.787 に答える
0

着信パラメーターの親を self.parent に割り当てますか?

def __init__(self,parent):
    self.parent = parent
于 2009-07-03T06:19:03.623 に答える