使用Python在Tkinter中放置对话框

使用Python在Tkinter中放置对话框,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我正在用python制作一个tkinter gui,但这并不合适,当我点击Activate时,它会打开一个新的框,提示用户输入用户名和密码,但有一些错误;我已经定义了下面的问题 以下是我正在使用的代码: import Tkinter import tkMessageBox from ttk import * from Tkinter import * root = Tk() top = Tk() def helloCallBack(): top.title("Activation") L

我正在用python制作一个tkinter gui,但这并不合适,当我点击Activate时,它会打开一个新的框,提示用户输入用户名和密码,但有一些错误;我已经定义了下面的问题
以下是我正在使用的代码:

import Tkinter
import tkMessageBox
from ttk import *
from Tkinter import *

root = Tk()
top = Tk()

def helloCallBack():

top.title("Activation")

Label(top, text="Username").grid(row=0, sticky=W, padx=4)
Entry(top).grid(row=0, column=1, sticky=E, pady=4)

Label(top, text="Pass").grid(row=1, sticky=W, padx=4)
Entry(top).grid(row=1, column=1, sticky=E, pady=4)

Button(top, text="Submit").grid(row=2, column=1)

B = Tkinter.Button(text ="Activate", command = helloCallBack)

B.pack()
root.mainloop()
top.mainloop()
所以我得到的输出是;

当我点击激活时:

这里有两个问题
1.当我运行程序时,根框后面有一个空白框,如何去掉它?

2.当我单击“激活”时,第一个消息框(根)没有被删除。您的主要错误是代码中有两个主循环(您试图运行两个单独的程序)。使用
Toplevel()
小部件,而不是
Tk()
的新实例,使用用户名/密码对和
destroy
方法关闭新框

下面是一个例子:

from Tkinter import *


def show_form():
    root = Tk()
    b = Button(text="Activate", command=lambda: show_call_back(root))
    b.pack()
    root.mainloop()


def show_call_back(parent):
    top = Toplevel(parent)

    top.title("Activation")
    Label(top, text="Username").grid(row=0, sticky=W, padx=4)
    Entry(top).grid(row=0, column=1, sticky=E, pady=4)
    Label(top, text="Pass").grid(row=1, sticky=W, padx=4)
    Entry(top).grid(row=1, column=1, sticky=E, pady=4)
    Button(top, text="Submit", command=top.destroy).grid(row=2, column=1)

show_form()
此外,该网站是非常推荐给你

以及一些链接:


(以及如何从中获取字符串,我认为这是您的下一步)

您的主要错误是代码中有两个主循环(您试图运行两个单独的程序)。使用
Toplevel()
小部件,而不是
Tk()
的新实例,使用用户名/密码对和
destroy
方法关闭新框

下面是一个例子:

from Tkinter import *


def show_form():
    root = Tk()
    b = Button(text="Activate", command=lambda: show_call_back(root))
    b.pack()
    root.mainloop()


def show_call_back(parent):
    top = Toplevel(parent)

    top.title("Activation")
    Label(top, text="Username").grid(row=0, sticky=W, padx=4)
    Entry(top).grid(row=0, column=1, sticky=E, pady=4)
    Label(top, text="Pass").grid(row=1, sticky=W, padx=4)
    Entry(top).grid(row=1, column=1, sticky=E, pady=4)
    Button(top, text="Submit", command=top.destroy).grid(row=2, column=1)

show_form()
此外,该网站是非常推荐给你

以及一些链接:


(以及如何从中获取字符串,我想这是你的下一步)

@Lafexlos,我同意你的观点,谢谢你的补充!这是真的,还有更多建议使用类结构(smth-like构建自己的
类应用程序(tk.tk)
)和方法和属性来存储这些变量。但我假设OP是python/tkinter的新手,这个信息对他来说太复杂了(或者太直截了当了,所以这里没有自己的研究空间,只是复制/过去)。我只是抓起OP的代码,用它做了他想要的。谢谢;),是的,我是Tkinter的Python新手,所以在学习过程中。@Lafexlos,我同意你的观点,谢谢你的补充!这是真的,还有更多建议使用类结构(smth-like构建自己的
类应用程序(tk.tk)
)和方法和属性来存储这些变量。但我假设OP是python/tkinter的新手,这个信息对他来说太复杂了(或者太直截了当了,所以这里没有自己的研究空间,只是复制/过去)。我只是抓起OP的代码,用它做了他想要的。谢谢;),是的,我是Tkinter的Python新手,所以正在学习过程中。