我正在尝试创建一个窗口,可以在其中输入不同的值。 该窗口应动态适应数据框。 到目前为止,效果很好。 现在我想将输入输出为数组。 数组也可以在函数中打印。
肯定是一个愚蠢的问题...但是我如何才能访问函数外部的数组?
通常,我可以按如下方式访问返回值:
def x(y):
y+1
return y
y2 = x(2)
print(y2)
--> 3
这是我第一次与tkinter合作。
通常,我会给Array
这样的东西:
ar = d.apply(self)
但是后来我得到了:invalid command name ".!mydialog.!frame.!entry"
from tkinter import *
from tkinter import messagebox
from tkinter import simpledialog
class MyDialog(simpledialog.Dialog):
def body(self, master):
d2={}
f={}
self.entries=[]
for i in range(len(df_data_1.columns) -1 ):
Label(master, text=df_data_1.columns[i]).grid(row=i)
entry = Entry(master)
entry.grid(row=i, column=1)
self.entries.append(entry)
def apply(self):
Array=[]
i=0
for entry in self.entries:
value = entry.get()
print(df_data_1.columns[i], value)
Array = np.append(Array, value)
i=i+1
return Array
root = Tk()
d = MyDialog(root)
有人可以帮助我从功能中获取Array
吗?
答案 0 :(得分:2)
GUI编程的工作方式不同于过程式编程,因为它是“事件驱动的”,这意味着它一直在无限循环中运行,处理用户输入直到结束。 simpledialog.Dialog
的构造函数中有这样的循环,仅在关闭或结束对话框窗口时返回。当用户单击 OK 按钮时,它就是调用apply()
方法的地方,因此您必须在此处进行一些操作,以便在用户事件之后稍后可以检索该值,处理循环结束。
要解决此问题并允许您以所需的方式使用它,我定义了一个名为get_array()
的函数,该函数创建tkinter root
窗口,将其隐藏,然后调用该对话框并等待它结束。为了使返回Array
成为可能,我将其设为MyDialog
类实例的属性,以便在对话框本身结束后可以对其进行访问。因此get_array()
将其作为结果返回。
import numpy as np
from tkinter import *
from tkinter import messagebox
from tkinter import simpledialog
class MyDialog(simpledialog.Dialog):
def body(self, master):
d2={}
f={}
self.entries=[]
for i in range(len(df_data_1.columns)-1):
Label(master, text=df_data_1.columns[i]).grid(row=i)
entry = Entry(master)
entry.grid(row=i, column=1)
self.entries.append(entry)
def apply(self):
""" Copy Entry values into an np.array attribute. """
self.Array = np.array([]) # Create empty attribute array.
for i, entry in enumerate(self.entries):
value = entry.get()
print(df_data_1.columns[i], value)
self.Array = np.append(self.Array, value) # Update attribute.
def get_array():
root = Tk()
root.withdraw()
d = MyDialog(root)
# Return dialog "Array" attribute if it has one.
return getattr(d, "Array", None)
if __name__ == '__main__':
result = get_array()
print(result)
答案 1 :(得分:0)
您的代码
Array=[]
...
Array = np.append(Array, value)
不正确-您正在混合numpy和普通数组。
只需将Array = np.append(Array, value)
替换为Array.append(value)
。