0

サンプルコードをオンラインで見ていますが、まったく同じようにやっているようです。しかし、UIが読み込まれるとすぐにイベントが読み込まれるようです。私は何を間違っていますか?

以下のコードから、ui がロードされたときにクリック関数が正しくロードされません。しかし、ボタンをクリックすると、次のようにスローされます。

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
TypeError: clicky() takes no arguments (1 given)

class LogIn:
    def __init__(self):
        self.root = Tk();
        self.root.title("480 - Chat Project Login");
        self.root.geometry("275x125");
        self.username = Label(self.root, text="Username: ");
        self.username.pack(side=LEFT);
        self.username.place(x=40, y=20);
        self.u_entry = Entry(self.root, width=20);
        self.u_entry.pack(side=RIGHT, ipady=4, ipadx=4);
        self.u_entry.place(x=110, y=20);
        self.password= Label(self.root, text="Password: ");
        self.password.pack(side=LEFT);
        self.password.place(x=40, y=50);
        self.p_entry = Entry(self.root, width=20);
        self.p_entry.pack(side=RIGHT, ipady=4, ipadx=4);
        self.p_entry.place(x=110, y=50);
        self.button = Button(text="Send", width=8);
        self.button.pack(side=RIGHT, ipady=4, ipadx=4);
        self.button.place(x=168, y=80);
        self.button.bind("<Button-1>", clicky);
        self.root.mainloop();

def clicky():
    print "hello";

if __name__ == "__main__":
    LogIn();
#    Client();
4

1 に答える 1

2

が必要self.button = Button(text="Send",width=8,command=clicky)です。

command経由で登録されたコールバックと経由で登録されたコールバックには違いがありますbind。ではcommand、コールバックに追加の引数が渡されません。ではbind、コールバックにイベント オブジェクトが渡されます。


また、明確でない場合は、これはオブジェクトcommandに固有のものでButtonあるのに対しbind、どの Tkinter ウィジェットにも適用できることに注意してください。

于 2012-11-27T05:17:29.153 に答える