Python通过按下按钮在funktion中调用多个命令

时间:2017-09-30 22:43:42

标签: python function button tkinter

我的代码有问题: 我希望弹出窗口(exp_Name)中的OK按钮(tkinter)在按下时发出三件事:

  • 首先它应该将条目中的一个字符串(在弹出窗口中)存储在全局变量中

    exp_name = entry.get()
    
  • 第二,它应该打开另一个窗口

    app.show_frame(PageOne)
    
  • 第三,它应该关闭弹出窗口

    popup.destroy
    

我试着调用一个函数,但我不知道如何在一个单独的函数中关闭弹出窗口。以及我应该如何将Entry存储在这个单独函数中的全局变量中。 非常感谢!! 这里是整个代码:

import tkinter as tk
from tkinter import ttk

global exp_name
exp_name = "Hello"

def exp_Name():
    popup = tk.Tk()
    popup.geometry("800x400")
    label=ttk.Label(popup, text="Enter Something:")
    label.pack(side="top", fill="x", pady=10)
    entry = ttk.Entry(popup)
    entry.pack()

##Here is the problem...
    OK_btn=ttk.Button(popup, text="OK", command= lambda: [app.show_frame(PageOne),exp_name = entry.get(), popup.destroy])
    OK_btn.pack()

    Close_btn=ttk.Button(popup, text="Close",command = popup.destroy)
    Close_btn.pack()
    popup.mainloop()


class Steppermovementsapp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        tk.Tk.iconbitmap(self, default="images/Icon_fly.ico")
        tk.Tk.wm_title(self, "Drosophila ADF apparatus")

        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames={}
        for F in (StartPage, PageOne):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

class StartPage(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)

        exp_btn = ttk.Button(self, text="Start experiment",command=exp_Name)
        exp_btn.pack()

class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label =ttk.Label(self, text=exp_name)
        label.pack()

app = Steppermovementsapp()
app.geometry("{0}x{1}".format(app.winfo_screenwidth(),app.winfo_screenheight()))
app.mainloop()

这是我尝试使用函数的方法:

import tkinter as tk
from tkinter import ttk

global exp_name
exp_name = "Hello"

class sidefunctions(tk.Tk):
    def func_three(self):
        app.show_frame(PageOne)
        exp_name = self.entry.get()
        popup.destroy

    def exp_Name(self):
        self.popup = tk.Tk()
        self.popup.geometry("800x400")
        self.label=ttk.Label(self,text="Enter Something:")
        self.label.pack(side="top", fill="x", pady=10)
        self.entry = ttk.Entry(self)
        self.entry.pack()

        self.OK_btn=ttk.Button(self,text="OK", command= self.func_three)
        self.OK_btn.pack()

        self.Close_btn=ttk.Button(self,text="Close",command = 
self.popup.destroy)
        self.Close_btn.pack()
        self.popup.mainloop()


class Steppermovementsapp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        tk.Tk.iconbitmap(self, default="images/Icon_fly.ico")
        tk.Tk.wm_title(self, "Drosophila ADF apparatus")

        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames={}
        for F in (StartPage, PageOne):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

class StartPage(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)

        exp_btn = ttk.Button(self, text="Start experiment",command=sidefunctions().exp_Name)
        exp_btn.pack()

    class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label =ttk.Label(self, text=exp_name)
        label.pack()

app = Steppermovementsapp()
app.geometry("{0}x{1}".format(app.winfo_screenwidth(),app.winfo_screenheight()))
app.mainloop()

0 个答案:

没有答案