1
class simpleapp_tk(tkinter.Tk):
    def __init__(self,parent):
        tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()



    def initialize(self):
        self.grid()
        self.ZOOMIN = tkinter.Button(self,text="ZOOM IN")
        self.ZOOMIN.grid(column=1,row=6)
        self.ZOOMIN.bind("<Button-1>",self.bzoomin())
        self.ZOOMIN.bind("<ButtonRelease-1>", self.brzoomin())

        self.pollvar=0


    def poll(self):
        if self.pollvar==1:
            self.ZOOMIN.after(300,self.poll())
            self.OnZOOMINClick()


    def brzoomin(self,event):
        self.pollvar=0
    def bzoomin(self,event):
        self.pollvar=1
        self.poll


    def OnZOOMINClick(self):
    ....code


if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.title('CAMERA CONTROLL v1')

    app.mainloop()

zoominbutton で mousebutton-1 が押されている間、繰り返し呼び出される関数を作成しようとしています。これは、ポーリングによって実装されることになっています。ボタンをクリックすると、ポーリング関数が呼び出されます。ポーリングは、mousebutton-1 が離されるまで継続して実行されます。しかし問題は、ボタンを押しても何も起こらないことです。

指摘された誤りを修正しました。しかし、ウィンドウ自体が表示されなくなり、「self.ZOOMIN.after(300,self.poll())」という行が原因でコードが無限ループに入るため、コードにはまだ問題があるはずです。(これは私のコードのほんの一部です)

4

1 に答える 1

2

Pythonでは、括弧を使用して一連の引数を渡すことにより、実際にメソッド/関数を呼び出す必要があります。関数/メソッドが引数を受け入れない場合でも、空の括弧が必要です。言い換えれば、あなたは欲しいです:

self.poll()

self.OnZOOMINClick()
self.grid()

self.poll、、self.OnZOOMINClickなどの代わりにself.grid。これは、Pythonでは関数とメソッドがオブジェクトであるためです。それらは、他のものと同じように、関数に渡したり、ローカル変数にバインドしたりできます。

ここには他のバグがあるかもしれませんが、それらはすぐに目立ちます(.gridすべてのコードを表示している場合、メソッドの行と列も少し奇妙に見えます)。目立つもう1つのバグは、の定義がOnZOOMINClickおそらくである。def OnZOOMINClick(self)


self.pollvar = int()また、まったく同じことをself.pollvar = 0行うと、2つのステートメントのうちの1つだけが必要になることに注意してください(後者の方が望ましいです)。

于 2012-08-27T14:40:07.523 に答える