1

データをプロットするための「リアルタイム」スコープを作成できるようにすることを目標に、Tkinterを学習しようとしています。テストとして、「描画」ボタンが押されるたびにキャンバスにポリゴンを描画しようとしています。三角形の位置はランダム化されます。私には2つの問題があります:

  1. プログラムが開始するとすぐにキャンバスに三角形が表示されますが、これを修正する理由と方法を教えてください。
  2. ボタンを押しても三角形は描画されません。少なくとも、三角形は表示されません。

コード:

from Tkinter import *

from random import randint

class App:
    
    def __init__(self,master):
        
        #frame = Frame(master)
        #frame.pack(side = LEFT)
        
        self.plotspc = Canvas(master,height = 100, width = 200, bg = "white")
        self.plotspc.grid(row=0,column = 2, rowspan = 5)
        
        self.button = Button(master, text = "Quit", fg = "red", \
                             command = master.quit)
        self.button.grid(row=0,column=0)
        
        self.drawbutton = Button(master, text = "Draw", command = \
                               self.pt([50,50]))
        self.drawbutton.grid(row = 0, column = 1)        
        
    def pt(self, coords):
        coords[0] = coords[0] + randint(-20,20)
        coords[1] = coords[1] + randint(-20,20)
        x = (0,5,10)
        y = (0,10,0)
        xp = [coords[0] + xv for xv in x]
        yp = [coords[1] + yv for yv in y]
        ptf = zip(xp,yp)
        self.plotspc.create_polygon(*ptf)        

    if __name__ == "__main__":
        root = Tk()
        app = App(root)
        root.mainloop()
4

1 に答える 1

5

command=self.pt([50,50])( ButtonDraw ボタンを作成する呼び出しで使用する)は、実行するように指示している呼び出しをすぐに実行Noneし、結果 ( ) を にバインドしcommandます。代わりに、同じように使用します。

, command=lambda: self.pt([50, 50]) )

そのボタンが押されるたびに呼び出しの実行を遅らせます。

于 2010-05-13T02:19:57.477 に答える