首页 > 解决方案 > 单个 onclick 生成多个 tkinter 窗口

问题描述

当我单击画布中的一个点(在 plot[0]==2, 模式中)而不是一个点时,会打开多个(大约 10 个)tkinter 窗口,询问经度和纬度

def on_press(self, event):
    initial_x=round(event.xdata,2)
    initial_y=round(event.ydata,2)
    if(plot[0]=='2'):
        master = tk.Tk()
        tk.Label(master, text="Source ").grid(row=0)
        tk.Label(master, text="Destination ").grid(row=1)                
        e = tk.Entry(master)
        f = tk.Entry(master)            
        e.grid(row=0, column=1)
        f.grid(row=1, column=1)

        def show_entry_fields():
            src = e.get()
            dest = f.get()    
            global flag
            flag = 0
            for i in range(0, nRoute):
                if((c1[i]==src and c2[i]==dest) or (c1[i]==dest and c2[i]==src)):
                    c9[i]='0';
                    flag = 1
            if(flag==0):
                # print("no two such locations found")
                initialPaths = extraPaths
                for i in range(0, initialPaths):
                    if((kneeSrc[i]==src and kneeDest[i]==dest) or (kneeSrc[i]==dest and kneeDest[i]==src)):
                        pass

            master.destroy()

        tk.Button(master, text='Quit', command=master.destroy).grid(row=3, column=0, sticky=tk.W)
        tk.Button(master, text='Okay', command=show_entry_fields).grid(row=3, column=1, sticky=tk.W, pady=4)

        self.after(100,master.mainloop())
        window.destroy()
    if(plot[0]=='1'):
        for i in range(0,nBus):
            if((round(busDict[col2[i]][2],2)==initial_x) and (round(busDict[col2[i]][3],2)==initial_y)):
                busDict[col2[i]][2]=0.0 
                busDict[col2[i]][3]=0.0   
    if event.inaxes != self.point.axes: return
    if DraggablePoint.lock is not None: return
    contains, attrd = self.point.contains(event)
    if not contains: return
    self.press = (self.point.center), event.xdata, event.ydata
    DraggablePoint.lock = self

    # draw everything but the selected rectangle and store the pixel buffer
    canvas = self.point.figure.canvas
    axes = self.point.axes
    self.point.set_animated(True)
    canvas.draw()

如何更改代码以便单击时仅生成一个 tkinter 窗口

标签: tkinterpython-3.7

解决方案


有一个简单的解决方法。启动新变量,然后在创建新窗口的部分周围self.onpress_open = False 添加self.onpress_open = True并放置带有条件的 if 语句。self.onpress_open == False然后不要忘记将self.onpress_open = False关闭该窗口的所有位置。

那只是化妆品修复。它并没有解决无意中多次运行您的功能的问题。


推荐阅读