Python 2.7 特金特';s类。uuu init_uuu()执行其中定义的小部件函数

Python 2.7 特金特';s类。uuu init_uuu()执行其中定义的小部件函数,python-2.7,tkinter,Python 2.7,Tkinter,我正在使用Tkinter为我的应用程序编写GUI。我使用类来描述整个结构,如所述。出于某种原因,该程序在启动时运行绑定到按钮的命令(即使其中一个按钮被禁用),并且在启动后不会对相同的按钮做出反应。请看下面我的代码 from Tkinter import * from new_plot_main import PlotClass class MainWindow: def __init__(self, master): Frame(master).grid()

我正在使用Tkinter为我的应用程序编写GUI。我使用类来描述整个结构,如所述。出于某种原因,该程序在启动时运行绑定到按钮的命令(即使其中一个按钮被禁用),并且在启动后不会对相同的按钮做出反应。请看下面我的代码

from Tkinter import *
from new_plot_main import PlotClass


class MainWindow:

    def __init__(self, master):

        Frame(master).grid()
        self.main_check = [NoneType, NoneType, NoneType, NoneType]
        self.scope_check = [NoneType, NoneType, NoneType, NoneType]
        self.main_check[0] = Checkbutton(master, text="Lines")
        self.main_check[1] = Checkbutton(master, text="Errors")
        self.main_check[2] = Checkbutton(master, text="Upstream Snr")
        self.main_check[3] = Checkbutton(master, text="Downstream Snr")
        self.scope_check[0] = Checkbutton(master, text="Lines")
        self.scope_check[1] = Checkbutton(master, text="Errors")
        self.scope_check[2] = Checkbutton(master, text="Upstream Snr")
        self.scope_check[3] = Checkbutton(master, text="Downstream Snr")
        self.stats_check = Checkbutton(master, text="Enable statistics")                     # Statistics trigger
        self.csi_check = Checkbutton(master, text="Enable CSI")                              # CSI calculation trigger
        self.scope_range = Entry(master, width=15).grid(row=4, column=3)                     # To specify scope range
        self.lines_entry = Entry(master, width=15).grid(row=6, column=1)                     # Lines to analyze
        self.save_to_pdf_button = Button(master,
                                         text="Save to PDF",
                                         state=DISABLED,
                                         width=10)
        self.plot_button = Button(master, text="Plot", width=10, command=self.plot_action())
        self.set_button = Button(master,
                                 text="Set", state=DISABLED,
                                 width=10, command=self.scope_action())      # Button to apply range from scope_range
        #------Setting coordinates via grid--------
        Label(master, text="Main", font=("Helvetica", 10, "bold")).grid(row=0, column=0, sticky=SW)
        Label(master, text="Scope", font=("Helvetica", 10, "bold")).grid(row=0, column=1, sticky=SW)
        Label(master, text="Options", font=("Helvetica", 10, "bold")).grid(row=0, column=3, sticky=SW)
        Label(master, text="Lines to plot").grid(row=6, column=0, sticky=E)
        Label(master, text="Set scope").grid(row=3, column=3, sticky=S)
        self.stats_check.grid(row=1, column=3, sticky=W)
        self.stats_check.select()
        self.csi_check.grid(row=2, column=3, sticky=W)
        self.csi_check.select()
        self.save_to_pdf_button.grid(row=6, column=4, sticky=E)
        self.plot_button.grid(row=6, column=2, sticky=W)
        self.set_button.grid(row=4, column=4, sticky=W)
        for i in xrange(0, 4):
            self.main_check[i].grid(row=i+1, column=0, sticky=W)
            self.scope_check[i].grid(row=i+1, column=1, sticky=W)
            self.main_check[i].select()
            self.scope_check[i].select()

    def plot_action(self):
        # plot = PlotClass()
        # self.top = Toplevel()
        print "Potatoes"

    def scope_action(self):
        # self.bot = Toplevel()
        print "Banana"




def handler():
    """
    Exiting GUI and stopping all processes, when system exit button is pressed.
    """
    root.quit()
    root.destroy()
root = Tk()
root.wm_title("Plot tool [new]")

app = MainWindow(root)
root.protocol("WM_DELETE_WINDOW", handler)
root.mainloop()
此代码在执行时输出
土豆
香蕉

您只需要使用函数,而不是函数结果。而不是:

self.plot_button = Button(master, text="Plot", width=10,
                          command=self.plot_action())
self.plot_button = Button(master, text="Plot", width=10,
                          command=self.plot_action)

使用:

这样,仅当按下按钮时才会调用命令

self.plot_button = Button(master, text="Plot", width=10,
                          command=self.plot_action)
self.set_button = Button(master, text="Set", state=DISABLED,
                         width=10, command=self.scope_action)