mainloop() 之后的 tkinter 代码在关闭后未被执行 window

tkinter code after mainloop() not being executed after closing window

我需要帮助在 python 中使用 tkinter。 我想在我的 class 中使用 while 循环,以便它在终端中不断打印条目的内容 (box1)。但问题是,如果我在 class 中放置一个循环,则条目甚至不会被创建,因为 root.mainloop() 在我的 while 循环之后。

程序:

from tkinter import *
from tkinter import ttk
import tkinter as tk

class root(Tk):
    def __init__(self):
        super(root, self).__init__()
        
        self.minsize(500,400)
        self.configure(bg='#121213')

        self.createEntry()


    def createEntry(self):
        self.name1 = StringVar()
        self.box1 = ttk.Entry(self, width=2, textvariable = self.name1, font="Calibri 15")
        self.box1.place(x=128, y=31)
        while True:
            print(self.name1.get())


        
root=root()
root.mainloop()

如果我将循环放在 root.mainloop() 之后,只要 tkinter 文件打开,它就不会开始打印 name1 的内容。所以它只会循环打印 name1 的最终版本: 代码:

from tkinter import *
from tkinter import ttk
import tkinter as tk

class root(Tk):
    def __init__(self):
        super(root, self).__init__()
        
        self.minsize(500,400)
        self.configure(bg='#121213')

        self.createEntry()


    def createEntry(self):
        self.name1 = StringVar()
        self.box1 = ttk.Entry(self, width=2, textvariable = self.name1, font="Calibri 15")
        self.box1.place(x=128, y=31)
        while True:
            print(self.name1.get())


        
root=root()
root.mainloop()
while True:
    print(root.name1.get())

Video of my problem

有人有解决办法吗?

不经常消耗处理能力的解决方案怎么样? 如果你给 StringVar 添加一个回调,你可以在每次变量改变时触发一个函数,而且只有在那个时候。无限循环在 UI 应用程序中效果不佳,因为为了避免停止应用程序的控制流,您必须使用异步、线程等。

    def createEntry(self):
        self.name1 = StringVar()
        self.name1.trace_add("write", lambda name, index, mode: print(self.name1.get()))
        self.box1 = ttk.Entry(self, width=2, textvariable = self.name1, font="Calibri 15")
        self.box1.place(x=128, y=31)

这段代码将使给定的 lambda 函数在每次写入 name1 变量时触发。