You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Tkinter文本框内容保存为字符串变量并用作窗口标题?

问题解决及代码修改

核心问题梳理

  1. 代码未导入tkinter模块,导致tk相关调用报错。
  2. title是Setup.save()中的局部变量,Counter类无法直接读取该变量。
  3. Text组件的get('1.0', tk.END)会获取到文本末尾的换行符,导致窗口标题包含多余空白。
  4. 创建多个tk.Tk()实例不符合Tkinter规范,易引发异常,建议用Toplevel作为子窗口。

修改后的完整代码

import tkinter as tk
from tkinter import messagebox

class Setup:
    def __init__(self):
        # 主窗口布局
        self.root = tk.Tk()
        self.root.geometry("500x300")
        self.root.title("Setup")

        self.label = tk.Label(self.root, text="Title of next window", font=('Arial', 18))
        self.label.pack(padx=10, pady=10)

        self.textbox = tk.Text(self.root, height=1, font=('Arial', 16))
        self.textbox.pack(padx=50, pady=10)

        self.button = tk.Button(self.root, text="Save", font=('Arial', 18), command=self.save)
        self.button.pack(padx=10, pady=10)

        self.root.protocol("WM_DELETE_WINDOW", self.on_closing)
        self.root.mainloop()

    def on_closing(self):
        if messagebox.askyesno(title="Quit?", message="Do you really want to quit?"):
            self.root.destroy()

    def save(self):
        # 获取文本并去除首尾空白(包括换行符)
        title = self.textbox.get('1.0', tk.END).strip()
        # 将title作为参数传给Counter类
        Counter(self.root, title)
        # 可选:关闭Setup窗口
        self.root.destroy()

class Counter:
    def __init__(self, parent, window_title):
        # 使用Toplevel创建子窗口,而非新的Tk实例
        self.root = tk.Toplevel(parent)
        self.root.geometry("500x300")
        self.root.title(window_title)

Setup()

修改说明

  • 补全import tkinter as tk,解决模块未导入问题。
  • 用.strip()处理文本框内容,移除多余换行和空白字符,保证标题格式正常。
  • 将title作为参数传递给Counter的构造函数,让子窗口能接收并使用标题内容。
  • 把Counter中的tk.Tk()替换为tk.Toplevel(parent),基于主窗口创建子窗口,规避多Tk实例引发的异常。如果需要关闭原设置窗口,可保留self.root.destroy()语句。

内容的提问来源于stack exchange,提问作者livymio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:53:12