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()
解决方案
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()
推荐阅读
- spring-mvc - Bean 名称“人”的 BindingResult 和普通目标对象都不能用作请求属性
- r - 在tidygraph中过滤
- reactjs - 搜索栏故障,随机(据说)发生
- c++ - std::sort 不适用于我的自定义迭代器
- python - GAN中生成器的输出形状和判别器的输入形状如何匹配?
- rollupjs - Rollup 不会捆绑 Proptypes 依赖项
- ios - 升级的 Appcelerator 现在 ios Simulators 将无法工作
- python - 函数返回空数据框
- c++ - 如何生成 C++ 定义调用的动态生成
- asp.net-core - .Net Core Azure Active Directory 身份验证问题(照片)