我一直在尝试创建一段代码,该代码将整数作为参数并创建该数量的tkinter条目字段。使用末尾的提交按钮将从字段中检索数据,将这些数据添加到列表中,然后关闭窗口。
我能够让它工作但是我找不到将其转换为可调用函数的方法;要求将其与我的程序的其余部分一起使用。 这是我到目前为止制作的代码,谢谢:
import tkinter as tk
b = input("Enter: ")
b = int(b)
root = tk.Tk()
newdict = dict()
outputs = list()
for i in range(b):
newdict["entry" + str(i)] = tk.Entry(root)
newdict["entry" + str(i)].pack()
button1 = tk.Button(root, text="Submit", command=lambda: Get(newdict))
button1.pack()
def Get(newdict):
for j in range(b):
outputs.append(newdict["entry" + str(j)].get())
root.quit()
root.mainloop()
print(outputs)
答案 0 :(得分:1)
基本思想是创建一个窗口,然后使用wait_window
方法等待窗口被销毁。一旦它被销毁,你可以返回一些价值。
问题是您要获取的值不能是窗口的属性,因为它在您准备提取它们时就已经被破坏了。您需要设置代码以在销毁窗口之前保存值。
一种简单的方法是提供一个" OK"获取值然后销毁窗口的按钮。另一种方法是跟踪与每个条目相关的变量,并在编辑时立即保存这些值。
您选择哪种方法取决于用户单击窗口控件以关闭窗口时所需的行为(例如:OSX上的红色圆圈,Windows上的[x]按钮等)。你想要返回他们输入的内容,还是将其视为取消操作而不返回任何内容?
这是一个使用OK按钮的简单示例。此示例假定您尚未运行GUI,并且此操作将作为非GUI应用程序的一部分运行。
import tkinter as tk
class Dialog(object):
def show(self, num_fields):
self.num_fields = num_fields
self.root = tk.Tk()
self.entries = []
for i in range(num_fields):
entry = tk.Entry(self.root)
entry.pack(fill="x")
self.entries.append(entry)
ok = tk.Button(self.root, text="OK", command=self.ok)
ok.pack(side="bottom", anchor="e", pady=(10,0), padx=10)
# wait for the window to be destroyed, then
# return the values. If the user clicks the OK button
# the values will be set; if they cancel the dialog
# this will return None.
self.values = None
self.root.wait_window()
return self.values
def ok(self):
# save all the values, then destroy the window
self.values = []
for i in range(self.num_fields):
self.values.append(self.entries[i].get())
self.root.destroy()
假设你正在运行一个非gui程序,这里有一个如何使用这个类的例子:
b = input("Enter: ")
b = int(b)
result = Dialog().show(b)
print("result:", result)