如何解决在Tkinter的弹出窗口中动态创建Entry窗口小部件时出现问题
我的目标是创建一个弹出窗口,该窗口从Entry小部件中获取字符串,小部件的数量由用户在主窗口上确定。因此,如果用户需要输入5个字段,则弹出窗口应具有5个Entry小部件以获取5个不同的字符串,如果用户输入4,则弹出窗口应具有4个小部件,依此类推。使用this question的帮助,我编写了以下代码:
import tkinter as tk
root = tk.Tk()
root.title("Main Window")
class EntryButton(object):
def __init__(self,rootWin,numberEn):
self.number = numberEn
self.entry = tk.Entry(rootWin)
self.button = tk.Button(rootWin,text="test",command=self.on_click)
self.entry.grid(row=numberEn,column=0)
self.button.grid(row=numberEn,column=1)
self.value = None
def on_click(self):
self.value = self.entry.get()
def popup_window(numberOfEntries,storageDict):
window = tk.Toplevel()
window.title("Pop-Up Window")
dictionary = dict()
for i in range(0,numberOfEntries):
dictionary[i] = EntryButton(window,i)
storageDict = dictionary
numberVar = tk.IntVar()
tk.Label(root,text='Enter how many markers you are using:',font=('bold',10)).grid(column= 0,row= 3)
tk.Entry(root,textvariable=numberVar).grid(column= 1,row=3)
number = numberVar.get()
mainStorage = dict()
initialPlotBtn = tk.Button(root,text='Start Labelling')
initialPlotBtn.config(command =lambda:
popup_window(numberOfEntries=number,storageDict=mainStorage)
)
initialPlotBtn.grid(column = 1,row = 4)
root.mainloop()
for key in mainStorage:
print(key,mainStorage[key])
我的主窗口如下所示: MainWindowImg。 但是,一旦创建了弹出窗口,它将显示为空,如下所示: Pop-upWindowImg。
我只是开始使用tkinter,所以可能有些东西我没有到达这里。 在Windows 10上使用Python 3.8.3
解决方法
您将number
的值用作popup_window()
的参数,但是number
为零,因为它是在创建条目后立即分配的。
您应该使用numberVar.get()
作为参数:
initialPlotBtn.config(command =lambda:
popup_window(numberOfEntries=numberVar.get(),storageDict=mainStorage)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。