首页 > 解决方案 > 为什么回调发生在执行开始时,甚至在事件之后?

问题描述

为了使用 Tkinter 制作 GUI,我编写了一个简短的代码。我想通过单击按钮在新窗口上绘制一些数据。但是,当我运行代码时,我什至在单击按钮之前就得到了一个图。任何人都可以向我解释(知道我是初学者):1.为什么会这样?2. 我该如何解决?

def stop_draw():
    """
    """
    import tkinter
    from matplotlib.backends.backend_tkagg import ( FigureCanvasTkAgg,                     
        NavigationToolbar2Tk)
    # Implement the default Matplotlib key bindings.
    from matplotlib.backend_bases import key_press_handler
    from matplotlib.figure import Figure
    import numpy as np

    chid_wind = tkinter.Tk()
    chid_wind.wm_title("Embedding in Tk")

    fig = Figure(figsize=(5, 4), dpi=100)
    t = np.arange(0, 3, .01)
    fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))

    canvas = FigureCanvasTkAgg(fig, master=chid_wind)  # A 
    tk.DrawingArea.
    canvas.draw()
    canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, 
    expand=1)

    toolbar = NavigationToolbar2Tk(canvas, chid_wind)
    toolbar.update()
    canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, 
    expand=1)


    def on_key_press(event):
        print("you pressed {}".format(event.key))
        key_press_handler(event, canvas, toolbar)


    canvas.mpl_connect("key_press_event", on_key_press)


    def _quit():
        chid_wind.quit()     # stops mainloop
        chid_wind.destroy()  # this is necessary on Windows to prevent
                # Fatal Python Error: PyEval_RestoreThread: NULL tstate


    button = tkinter.Button(master=chid_wind, text="Quit", command=_quit)
    button.pack(side=tkinter.BOTTOM)

    tkinter.mainloop()

    #..............................................................    

from tkinter import *

window1=Tk()
#........................................
frmmeasurement=Frame(window1, bg="gray")
frmmeasurement.pack(side=LEFT)
#........................................
btnstop=Button(frmmeasurement, text='Stop', width=30,
           font=("Times New Roman", 12, "bold"), command=stop_draw())
btnstop.pack(fill=X)
#........................................

我希望有一个窗口,包含一个框架和一个按钮(名为“停止”);然后只有当我单击此按钮时,才会出现一个包含绘图的新窗口。

标签: python-3.xtkinter

解决方案


推荐阅读