执行弹出式tkinter窗口的问题

时间:2015-06-18 03:28:21

标签: python tkinter popup

在这个应用程序中,我试图执行一个用户可以写日期的弹出窗口。此弹出窗口必须在用户单击我已创建的提交按钮后发生。用户输入此弹出窗口的日期必须保存到变量中,稍后将在代码中使用该变量。为了做到这一切,我尝试了以下方法:

def CreateOrderPop(self):
            def popup():
                #contenido = input("Contenido de Orden ")
                #diaDeEntregar = input("Dia de Entrega")
                self.userentryA = Entry("Dia de Entrega: ")
                self.userentryA.pack()
                self.userentryAbu = Button(text= "Guardar", command = self.guardarFechaOrden)
                self.userentryAbu.pack()
            def guardarFechaOrden(self):
                global userDate
                userDate = self.userentryA.get()
                self.destroy()    

    def submit(self):
        result = next(self.counter)
        global orderResult
        orderResult = str(result)
        global contents1
        contents1 = ("Nombre: {}".format(self.entry_name.get())) 
        global contents2
        contents2 = ("Email: {}".format(self.entry_email.get()))
        global contents3
        contents3 = ("Num Cel/Tel: {}".format(self.entry_numtc.get()))
        global contents4
        contents4 = ("Información Adicional: {}".format(self.entry_addinf.get(1.0, "end")))

        def CreateOrder():
            fecha = datetime.now()
            fechaDeCreacion = fecha.strftime(" %A, %B %d, %Y" )
            #diaDeEntregar = userDate
            #global fechaDeEntrega
            #fechaDeEntrega = fechaDeCreacion + str(diaDeEntregar)
            numOrden = orderResult
            return fechaDeCreacion,  orderResult


        completeOrden = [contents1, contents2,  contents3, contents4, CreateOrder()]
        completeOrdenEnum = "Orden Num:" + orderResult, completeOrden
        Database.mainDatabase.append(completeOrdenEnum)

        command = self.CreateOrderPop()

运行代码并单击提交按钮后,一切正常,除非我没有得到我想要的弹出窗口。

变化

我添加了这个课程来帮助我创建我想要的东西:

class PopOrden:
        def __init__(self,master):
            self.master = master
            top=self.top=Toplevel(master)
            self.l=Label(top,text="Fecha de Entrega")
            self.l.pack()
            self.e=Entry(top)
            self.e.pack()
            self.b=Button(top,text='Ok',command=self.cleanup)
            self.b.pack()

        def cleanup(self):
            self.value=self.e.get()
            self.top.destroy()


        def entryValue(self):
            return self.w.value
            print(self.w.value)

以前的代码以及此编辑的代码:

def submit(self):

        result = next(self.counter)
        print (result)
        def controLoo():
            if result == 1: 
                self.CreateOrderPop()
        command = controLoo()
        global orderResult
        orderResult = str(result)
        global contents1
        contents1 = ("Nombre: {}".format(self.entry_name.get())) 
        global contents2
        contents2 = ("Email: {}".format(self.entry_email.get()))
        global contents3
        contents3 = ("Num Cel/Tel: {}".format(self.entry_numtc.get()))
        global contents4
        contents4 = ("Información Adicional: {}".format(self.entry_addinf.get(1.0, "end")))

        def CreateOrder():
            fecha = datetime.now()
            fechaDeCreacion = fecha.strftime(" %A, %B %d, %Y" )
            #diaDeEntregar = PopOrden
            #global fechaDeEntrega
            #fechaDeEntrega = fechaDeCreacion + str(diaDeEntregar)
            numOrden = orderResult
            return fechaDeCreacion,  orderResult


        completeOrden = [contents1, contents2,  contents3, contents4, CreateOrder()]
        completeOrdenEnum = "Orden Num:" + orderResult, completeOrden
        Database.mainDatabase.append(completeOrdenEnum)


        command = self.database_window()


        self.clear()


        messagebox.showinfo(title = "Orden #"+ orderResult, message = "Orden Guardada")

但是,我现在遇到了一个空白的tk popu问题,这也是我想要的弹出窗口生成的。

2 个答案:

答案 0 :(得分:0)

我不确定你的意思是什么运行正常,因为你的代码似乎有一些主要的格式问题(至少可以说缩进)。然而,弹出窗口'通常使用Toplevel()小部件来实现。请参阅this有用的资源。在我看来,它是tkinter所有东西的绝佳资源。

此外,您可能会发现this问题的答案有用。

答案 1 :(得分:0)

为什么不直接使用消息框

from tkinter import *
import tkMessageBox
root = Tk()

def popUp():
    result = tkinter.messageBox.popUp("Quiz","Are you ready? ")
    # result wil be yes or no
    if result == 'yes':  
        #do something
   else:
        # do something

submitButton = Button(root,text= "Submit")
submitButton.bind("<Button-1",popup) 
# onleft click on submit popup method gets called
submitButton.pack()