Python 3.x 当用户将测试输入tkinter条目小部件时,如何关闭当前tkinter窗口并打开新的tkinter窗口

Python 3.x 当用户将测试输入tkinter条目小部件时,如何关闭当前tkinter窗口并打开新的tkinter窗口,python-3.x,tkinter,Python 3.x,Tkinter,我想关闭当前的tkinter窗口,并在用户向entry小部件输入文本时打开一个新的tkinter窗口。这听起来可能令人困惑,所以让我解释一下 第一个tkinter窗口: 当用户向条目小部件输入文本时,我希望当前窗口关闭,第二个窗口打开,用户输入的文本显示在标签小部件中 第二个窗口: 这是我目前的代码: 从tkinter导入* 用户输入=“” 类启动窗口: 定义初始(自我,主): self.master=master 主标题(“窗口1”) def get_输入(事件): 全局用户输入 #从条目

我想关闭当前的tkinter窗口,并在用户向entry小部件输入文本时打开一个新的tkinter窗口。这听起来可能令人困惑,所以让我解释一下

第一个tkinter窗口:

当用户向条目小部件输入文本时,我希望当前窗口关闭,第二个窗口打开,用户输入的文本显示在标签小部件中

第二个窗口:

这是我目前的代码:

从tkinter导入*
用户输入=“”
类启动窗口:
定义初始(自我,主):
self.master=master
主标题(“窗口1”)
def get_输入(事件):
全局用户输入
#从条目小部件获取用户输入
user\u input=self.input.get()
#清除条目小部件
self.input.delete(0,结束)
毁灭大师
self.label=label(master,text='Input:')
self.label.grid(行=0,列=0)
self.input=条目(主)
self.input.grid(行=0,列=1)
self.input.focus()
self.input.bind(“,get_input”)
类主窗口:
定义初始(自我,主):
self.master=master
主标题(“窗口2”)
self.label=label(master,text=“您已输入(用户输入)”+用户输入)
self.label.pack()
root=Tk()
启动窗口=启动窗口(根)
如果用户输入!='':
主窗口=主窗口(根)
mainloop()

我是tkinter和面向对象编程的新手,因此非常感谢您的帮助

这对你有用。正如@CoolCloud所提到的,
if
条件将只检查一次。因为
mainloop()
实际上是在等待事件被触发(可能通过一些
按钮
或其他什么),所以不会重复执行代码块

import tkinter as tk

class MainApp():
    def __init__(self, root):
        self.root = root
        self.inputBox = tk.Entry(self.root)
        self.inputBox.pack()
        self.inputBox.bind('<Return>', self.checkInput)

    def checkInput(self, args):
        if self.inputBox.get() != '':
            userVal = self.inputBox.get()
            self.root.destroy() # try root.quit if it doesn't work
            newWindow = tk.Tk()
            myLabel = tk.Label(newWindow, text='You entered: ' + userVal)
            myLabel.pack()

win = tk.Tk()
MainApp(win)
win.mainloop()
将tkinter作为tk导入
类MainApp():
定义初始化(自,根):
self.root=根
self.inputBox=tk.Entry(self.root)
self.inputBox.pack()
self.inputBox.bind(“”,self.checkInput)
def checkInput(自身,参数):
如果self.inputBox.get()!='':
userVal=self.inputBox.get()
self.root.destroy()#如果无效,请尝试root.quit
newWindow=tk.tk()
myLabel=tk.Label(newWindow,text='您输入的:'+userVal)
myLabel.pack()
win=tk.tk()
主应用程序(赢)
win.mainloop()

我认为用OOP说
全局
是不好的,为了达到这个效果,我认为你可以
绑定
键来关闭窗口。我还注意到
如果用户输入!='':会运行,也就是说,最初您的条目小部件是空的,因此它不会被执行。还请记住,这两种方法都在同一个
root=Tk()
中工作,这意味着您要覆盖一个GUI窗口,而不是创建一个新窗口,因此可以使用
Toplevel()
somewhere@CoolCloud这部分代码循环不是由于底部的
mainloop()
引起的吗?是的,但代码只检查一次条件,在这之后,它们不会,这就是为什么我们通常将
.get()
放在稍后调用的函数中
mainloop()
并不意味着我们正在重复中间的代码块guesss@CoolCloud好的,谢谢你的帮助。谢谢!这是一个聪明的方法。
import tkinter as tk

class MainApp():
    def __init__(self, root):
        self.root = root
        self.inputBox = tk.Entry(self.root)
        self.inputBox.pack()
        self.inputBox.bind('<Return>', self.checkInput)

    def checkInput(self, args):
        if self.inputBox.get() != '':
            userVal = self.inputBox.get()
            self.root.destroy() # try root.quit if it doesn't work
            newWindow = tk.Tk()
            myLabel = tk.Label(newWindow, text='You entered: ' + userVal)
            myLabel.pack()

win = tk.Tk()
MainApp(win)
win.mainloop()