如何从窗体的第一个文本框中获取条目并用作按钮文本

2024-04-20 05:11:32 发布

您现在位置:Python中文网/ 问答频道 /正文

单击“保存”按钮后,我尝试将第一个输入框中的文本作为新创建的按钮中的文本。但是,我在获取文本框的输入文本时遇到问题

我已经尝试使用entry[0]来获取文本,但是我不知道文本值是否存储在那里,这也给了我一个错误。错误显示为“未解析引用”

from tkinter import *
import tkinter as tk

class MainWindow(tk.Frame):
    counter = 0
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.button = tk.Button(self, text="Create new hotlink",
                        command=self.create_window)
        self.button.pack(side="top")

    def create_window(self):
        self.counter += 1
        t = tk.Toplevel(self)
        t.wm_title("Create New Hotlink")
        fields = 'Hotlink Name', 'URL'

        def fetch(entries):
            for entry in entries:
                field = entry[0]
                text = entry[1].get()
                print('%s: "%s"' % (field, text))

        def makeform(root, fields):
            entries = []
            for field in fields:
                row = Frame(root)
                lab = Label(row, width=15, text=field, anchor='w')
                ent = Entry(row)
                row.pack(side=TOP, fill=X, padx=5, pady=5)
                lab.pack(side=LEFT)
                ent.pack(side=RIGHT, expand=YES, fill=X)
                entries.append((field, ent))
            return entries


        ents = makeform(t, fields)
        t.bind('<Return>', (lambda event, e=ents: fetch(e)))
        b2 = Button(t, text='Save', command=button2())
        b2.pack(side=LEFT, padx=5, pady=5)

def button2():
    newButton = tk.Button(root, text=entry[0])
    newButton.pack()

if __name__ == "__main__":
    root = tk.Tk()
    main = MainWindow(root)
    main.pack(side="top", fill="both", expand=True)
    root.mainloop()

Tags: text文本selffieldfieldsdefbuttonroot
1条回答
网友
1楼 · 发布于 2024-04-20 05:11:32

entry是一个局部变量。你不能在那里引用它。您需要意识到,您需要的所有信息都在ents变量中。用这个

我已经去掉了你代码中不必要的部分

from tkinter import *
import tkinter as tk

class MainWindow(tk.Frame):
    counter = 0
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.button = tk.Button(self, text="Create new hotlink", command=self.create_window)
        self.button.pack(side="top")

    def create_window(self):
        self.counter += 1
        t = tk.Toplevel(self)
        t.wm_title("Create New Hotlink")
        fields = 'Hotlink Name', 'URL'

        def makeform(root, fields):
            entries = []
            for field in fields:
                row = Frame(root)
                lab = Label(row, width=15, text=field, anchor='w')
                ent = Entry(row)
                row.pack(side=TOP, fill=X, padx=5, pady=5)
                lab.pack(side=LEFT)
                ent.pack(side=RIGHT, expand=YES, fill=X)
                entries.append((field, ent))
            return entries

        def button2():
            newButton = tk.Button(root, text=ents[0][1].get())
            newButton.pack()                #\______________/

        ents = makeform(t, fields)
        b2 = Button(t, text='Save', command=button2)
        b2.pack(side=LEFT, padx=5, pady=5)

if __name__ == "__main__":
    root = tk.Tk()
    main = MainWindow(root)
    main.pack(side="top", fill="both", expand=True)
    root.mainloop()

相关问题 更多 >